P5816 [CQOI2010]内部白点 题解
【题目链接】
【解析】
好题。
拿到题目首先先看一下它的无解情况是怎么判断的。
然后很明显这个是不存在无解情况的。
因为它的黑点开始都是给定了的,可以理解为一个边界。
而新的变化的黑点不会往外扩张,那么也就意味着边界不会扩大。
边界不会扩大,那么变色过程就会终止。
然后考虑按着题目里的意思来看,你就会发现一个白点变为黑点,始终实在两个横坐标相同的点之间的。
这可以抽象为一根竖线,然后这个时候你发现只要出现了一根水平的线就对答案有贡献了。
那么,你就可以使用一种扫描线的过程。
对于竖线就是扫到上端点就执行单点减的过程,扫到下断点就单点加。
对于横线就直接区间查找一波,等价于寻找与它有交点的竖线个数。
然后就没了,不过坐标可能为负,所以需要离散化。
#include<bits/stdc++.h>
#define int long long
using namespace std;
template<typename T> inline void read(T &x){T f=1;x=0;char ch=getchar();while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}x*=f;}
const int N = 6e5;
int n,xx[N],yy[N],c[N],ans,m1,m2,num;
struct node{int x,y;}a[N];
struct line{int x,y,rx,type;}l[N];
int mp(line x,line y){
if(x.y==y.y) return x.type<y.type;
else return x.y<y.y;
}
int cmp(node x,node y){if(x.y!=y.y)return x.y<y.y; return x.x<y.x;}
int comp(node x,node y){if(x.x!=y.x) return x.x<y.x;return x.y<y.y;}
int lowbit(int x){return x&(-x);}
void change(int x,int val){
for(int i=x;i<=N;i+=lowbit(i)) c[i]+=val;
}
int ask(int x){
int ans=0;
for(int i=x;i;i-=lowbit(i)) ans+=c[i];
return ans;
}
void work(){
sort(a+1,a+n+1,cmp);
for(int i=1;i<n;i++){
if(a[i].y==a[i+1].y){
l[++num].x=a[i].x;l[num].y=a[i].y;
l[num].rx=a[i+1].x;l[num].type=0;
}
}
sort(a+1,a+n+1,comp);
for(int i=1;i<n;i++){
if(a[i].x==a[i+1].x){
l[++num].x=a[i].x;l[num].y=a[i].y;l[num].type=1;
l[++num].x=a[i].x;l[num].y=a[i+1].y;l[num].type=-1;
}
}
sort(l+1,l+num+1,mp);
}
signed main(){
read(n);
for(int i=1;i<=n;i++) read(a[i].x),read(a[i].y),xx[i]=a[i].x,yy[i]=a[i].y;
sort(xx+1,xx+n+1);sort(yy+1,yy+n+1);
m1=unique(xx+1,xx+n+1)-1-xx;
m2=unique(yy+1,yy+n+1)-1-yy;
for(int i=1;i<=n;i++){
int val=lower_bound(xx+1,xx+m1+1,a[i].x)-xx;a[i].x=val;
val=lower_bound(yy+1,yy+m2+1,a[i].y)-yy;a[i].y=val;
}
work();
ans=n;
for(int i=1;i<=num;i++){
if(!l[i].type){
ans+=ask(l[i].rx-1)-ask(l[i].x);
}
else{
change(l[i].x,l[i].type);
}
}
cout<<ans;
return 0;
}
P5816 [CQOI2010]内部白点 题解的更多相关文章
- Bzoj1818: [Cqoi2010]内部白点 && Tyvj P2637 内部白点 扫描线,树状数组,离散化
1818: [Cqoi2010]内部白点 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 704 Solved: 344[Submit][Status] ...
- 【BZOJ1818】[CQOI2010]内部白点(树状数组,扫描线)
[BZOJ1818][CQOI2010]内部白点(树状数组,扫描线) 题面 BZOJ 题解 不难发现\(-1\)就是在搞笑的. 那么对于每一行,我们显然可以处理出来最左和最右的点,那么等价于我们在横着 ...
- 【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组
[BZOJ1818][Cqoi2010]内部白点 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变 ...
- BZOJ_1818_[Cqoi2010]内部白点 _扫描线+树状数组
BZOJ_1818_[Cqoi2010]内部白点 _扫描线+树状数组 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟 ...
- bzoj 1818 Cqoi2010 内部白点 扫描线
[Cqoi2010]内部白点 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1126 Solved: 530[Submit][Status][Disc ...
- 【BZOJ】1818: [Cqoi2010]内部白点(树状数组+离散+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1818 这一题一开始我就看错了,bzoj的那个绝对值109简直坑人,应该是10^9,我直接写了个暴力. ...
- [CQOI2010]内部白点
Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变黑,直到不存在内部白点为止.你的任务是统计最后网格 ...
- 1818: [Cqoi2010]内部白点
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1394 Solved: 625 [Submit][Status][Discuss] Descriptio ...
- bzoj1818 [Cqoi2010]内部白点
Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变黑,直到不存在内部白点为止.你的任务是统计最后网格 ...
随机推荐
- 『动善时』JMeter基础 — 31、JMeter中BeanShell断言详解
目录 1.BeanShell简介 2.Beanshell的内置变量和方法 3.BeanShell断言界面详解 4.BeanShell断言的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 ...
- 实现不同VLAN间的通信(单臂路由和链路聚合)
单臂路由与链路聚合 1.单臂路由 1.1 链路类型 1.2 子接口 2. 链路捆绑 1.单臂路由 是指在路由器的一个接口上通过配置子接口,实现原来相互隔离的不同VLAN(虚拟局域网)之间的互联互通. ...
- 使用kubeadm部署一套高可用k8s集群
使用kubeadm部署一套高可用k8s集群 有疑问的地方可以看官方文档 准备环境 我的机器如下, 系统为ubuntu20.04, kubernetes版本1.21.0 hostname IP 硬件配置 ...
- CVD和ALD薄膜沉积技术应用领域
CVD和ALD薄膜沉积技术应用领域 显示 用于OLED.QD-OLED.甚至未来QLED的薄膜封装,通过有机/无机叠层结构的保护,水汽渗透率WVTR可降至10-5g/m2/day,保证OLED或者量子 ...
- 人工智能训练云燧T10
人工智能训练云燧T10 基于邃思芯片打造的面向云端数据中心的人工智能训练加速产品,具有高性能.通用性强.生态开放等优势,可广泛应用于互联网.金融.教育.医疗.工业及政务等人工智能训练场景. 超强算力 ...
- 三维视觉惯性SLAM的有效Schmidt-EKF
三维视觉惯性SLAM的有效Schmidt-EKF An Efficient Schmidt-EKF for 3D Visual-Inertial SLAM 论文地址: http://openaccess ...
- TensorRT 数据格式说明
TensorRT数据格式说明 NVIDIA TensorRT支持不同的数据格式.需要考虑两个方面:数据类型和布局. 数据类型格式 数据类型是每个单独值的表示.它的大小决定了数值的范围和表示的精度:分 ...
- YOLOv3和YOLOv4长篇核心综述(下)
YOLOv3和YOLOv4长篇核心综述(下) 4.3.3 Neck创新 在目标检测领域,为了更好的提取融合特征,通常在Backbone和输出层,会插入一些层,这个部分称为Neck.相当于目标检测网络的 ...
- 我的N年软件测试感悟
1.前言 大家好!我是Meng前段时间,很荣幸被一合作伙伴邀请发表一篇文章,主题为"这些年,我所从事软件测试的一些感悟",正好趁着这个机会,我也好好总结一下. 2.测试培训 对于软 ...
- Spring——Bean的作用域
Spring中Bean的作用域有五种,分别是singleton.prototype.request.session.globalSession.其中request.session.globalSess ...