传送门

解题思路

  首先一定不可能有\(-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;
}

BZOJ 1818: [Cqoi2010]内部白点(树状数组)的更多相关文章

  1. B1818 [Cqoi2010]内部白点 树状数组

    这个题的想法很好想,就是进行排序之后直接检查每个点的上下左右是否有黑点就行.但是直接枚举显然不行,那怎么办呢?我们就用树状数组维护扫描线,把每排左右点看成一条线覆盖,然后从下往上扫,遇到下加一,遇到上 ...

  2. BZOJ 1818: [Cqoi2010]内部白点 扫描线+树状数组

    问题转化为求每一个极长横线段与极长纵线段的交点个数. 这个东西用扫描线+树状数组维护一下就可以了. code: #include <cstdio> #include <algorit ...

  3. bzoj 1818: [Cqoi2010]内部白点

    #include<cstdio> #include<iostream> #include<algorithm> using namespace std; struc ...

  4. bzoj 1818 Cqoi2010 内部白点 扫描线

    [Cqoi2010]内部白点 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1126  Solved: 530[Submit][Status][Disc ...

  5. BZOJ 1818: [Cqoi2010]内部白点 (BIT + 扫描线)

    就是求多条线段的交点数,直接BIT+扫描线就行了. 注意不要算重最初存在的点. CODE #include<bits/stdc++.h> using namespace std; char ...

  6. 【BZOJ】1818: [Cqoi2010]内部白点(树状数组+离散+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1818 这一题一开始我就看错了,bzoj的那个绝对值109简直坑人,应该是10^9,我直接写了个暴力. ...

  7. BZOJ 1901 Zju2112 Dynamic Rankings ——树状数组套主席树

    [题目分析] BZOJ这个题目抄的挺霸气. 主席树是第一时间想到的,但是修改又很麻烦. 看了别人的题解,原来还是可以用均摊的思想,用树状数组套主席树. 学到了新的姿势,2333o(* ̄▽ ̄*)ブ [代 ...

  8. [BZOJ 1901] Dynamic Rankings 【树状数组套线段树 || 线段树套线段树】

    题目链接:BZOJ - 1901 题目分析 树状数组套线段树或线段树套线段树都可以解决这道题. 第一层是区间,第二层是权值. 空间复杂度和时间复杂度均为 O(n log^2 n). 线段树比树状数组麻 ...

  9. BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]

    题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...

随机推荐

  1. Python的Django框架中的URL配置与松耦合

    Python的Django框架中的URL配置与松耦合 用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比 ...

  2. python通过post提交数据的方法

    python通过post提交数据的方法 本文实例讲述了python通过post提交数据的方法.分享给大家供大家参考. 具体实现方法如下:     # -*- coding: cp936 -*- imp ...

  3. C++学习笔记(四)--指针

    1.指针(变量的地址): 指针变量:存放指针(地址)的变量 直接存取(访问):按变量地址取值 间接存取(访问):将变量的地址放入指针变量中 定义指针变量:基类型 *指针变量名 2.与指针有关的运算符: ...

  4. meta标签viewport的深入理解(转)

    移动前端开发之viewport的深入理解 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的met ...

  5. Winfrom传值 分类: C# 2015-07-22 15:41 1人阅读 评论(0) 收藏

    以前对WinForm窗体显示和窗体间传值了解不是很清楚  最近做了一些WinForm项目,把用到的相关知识整理如下  A.WinForm中窗体显示  显示窗体可以有以下2种方法:  Form.Show ...

  6. C#面试 笔试题 六

    1.String str=new String("a")和String str = "a"有什么区别? String str = "a"; ...

  7. Windows程序设计--(五)绘图基础

    5.1 GDI的结构 图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,它负责在视讯显示器和打印机上显示图形. 5.2 设备环境 5.2.1 获取设备 ...

  8. 分析abex'crackme#2

    文件地址:https://www.wocloud.com.cn/webclient/share/sindex.action?id=i9K_Br6TgE4gbyGIlYkffWKcRy5TUdZ8U6_ ...

  9. 修改ps工具栏字体大小

     修改ps工具栏字体大小 先改电脑分辨率或者改首选项--界面---文字,退出后,重新打开,但你会发现问题还是没解决,我们接着往下  找到文件夹安装目录下的photoshops.exe启动文件(查找方法 ...

  10. 在iOS中去掉input的光标

    在input上添加 readonly unselectable="on" οnfοcus="this.blur()" 就可以了.