传送门

解题思路

  首先一定不可能有\(-1\)的情况,因为新产生的黑点不会造成任何贡献,它的各个方面都是不优的。那么只需要统计一遍答案,首先要将横坐标相同的两个点看成一条竖线,纵坐标相同的点看成一条横线,然后从下往上扫描,遇到竖线的下端点时,在树状数组里\(+1\),遇到竖线上端点时,\(-1\),然后遇到横线时就统计答案。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std;
const int N=100005; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) f=ch=='-'?0:1,ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return f?x:-x;
} int n,a[N],ans,cnt,f[N],u; struct Node{
int x,y;
}node[N]; struct Data{
int x,y,k,z;
friend bool operator<(const Data A,const Data B){
return A.y==B.y?A.k>B.k:A.y<B.y;
}
}data[N<<2]; inline bool cmp1(Node A,Node B){
return A.x==B.x?A.y<B.y:A.x<B.x;
}
inline bool cmp2(Node A,Node B){
return A.y==B.y?A.x<B.x:A.y<B.y;
} inline void Insert(int x,int l,int r,int k){
if(!k) {data[++cnt].x=l; data[cnt].z=r; data[cnt].y=x;}
else {
data[++cnt].x=x; data[cnt].y=l; data[cnt].k=1;
data[++cnt].x=x; data[cnt].y=r; data[cnt].k=-1;
}
} inline void build(){
sort(node+1,node+1+n,cmp1);
for(int i=2;i<=n;i++)
if(node[i].x==node[i-1].x)
Insert(node[i].x,node[i-1].y,node[i].y,1);
sort(node+1,node+1+n,cmp2);
for(int i=2;i<=n;i++)
if(node[i].y==node[i-1].y)
Insert(node[i].y,node[i-1].x,node[i].x,0);
} inline void update(int x,int y){
for(;x<=u;x+=x&-x) f[x]+=y;
}
inline int query(int x){
int ret=0;
for(;x;x-=x&-x) ret+=f[x];
return ret;
} inline void work(){
sort(data+1,data+1+cnt);
for(int i=1;i<=cnt;i++){
if(!data[i].k) ans+=query(data[i].z-1)-query(data[i].x);
else update(data[i].x,data[i].k);
}
} int main(){
n=rd(); ans=n; int x,y;
for(int i=1;i<=n;i++){
x=rd(),y=rd(); a[i]=x;
node[i].x=x,node[i].y=y;
}
sort(a+1,a+1+n); u=unique(a+1,a+1+n)-a-1;
for(int i=1;i<=n;i++)
node[i].x=lower_bound(a+1,a+1+u,node[i].x)-a;
build(); work();
printf("%d\n",ans);
return 0;
}

最新文章

  1. SpringMVC学习笔记(二)
  2. POJ 1068
  3. 《深入理解Nginx》阅读与实践(三):使用upstream和subrequest访问第三方服务
  4. The Pilots Brothers&#39; refrigerator
  5. python中的reduce(转)
  6. 高性能Web框架Zend Framework
  7. Spring AOP实现方式三之自动扫描注入【附源码】
  8. C语言--基本运算符
  9. javascript函数作用域链之词法作用域
  10. OpenGL入门【1 高速入门】
  11. 对SVD奇异值分解的理解
  12. Gridview的item含有checkbox,setOnItemClickListener方法失效的问题
  13. Hexo server报错TypeError: Cannot read property &#39;utcOffset&#39; of null解决方法
  14. 第4章 打包和构建 - Identity Server 4 中文文档(v1.0.0)
  15. 获取Type的三种方式
  16. springboot 静态资源配置
  17. iOS开发简记(9):APPStore审核
  18. P1379 八数码naive题,STL的胜利
  19. expect脚本实现ssh自动登录
  20. Centos7 进入单用户模式,修复系统

热门文章

  1. 【EWM系列】SAP EWM模块-部分流程图
  2. vc code 一个非常不错的插件
  3. [Linux] 012 文件搜索命令
  4. MyEclipse停止自带插件的启动
  5. mysql 分区与性能
  6. DP50题(转)
  7. 3、NumPy 数组属性
  8. CodeChef A String Game(SG)
  9. C# 使用Epplus导出数据到Excel
  10. mysql 删除重复数据只保留一条记录