bzoj 1818 Cqoi2010 内部白点 扫描线
[Cqoi2010]内部白点
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 1126 Solved: 530
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
0 2
2 0
-2 0
0 -2
Sample Output
数据范围
36%的数据满足:n < = 500
64%的数据满足:n < = 30000
100%的数据满足:n < = 100000
发现第一秒变完后就没了,不可能为-1
然后就是扫描线求交点了。
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstdio> #define N 100001
#define M 1000001
#define ll long long
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch>''||ch<''){if (ch=='-') f=-;ch=getchar();}
while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,cnt,ans,hash[N],tr[N];
struct point{int x,y;}a[N];
struct seg{int k,x,y,r;}s[M]; inline bool cmp1(point a,point b){if(a.x==b.x){return a.y<b.y;}return a.x<b.x;}
inline bool cmp2(point a,point b){if(a.y==b.y){return a.x<b.x;}return a.y<b.y;}
inline bool cmp3(seg a,seg b)
{
if(a.y==b.y)return a.k<b.k;
return a.y<b.y;
}
int find(int x)
{
int l=,r=n,mid;
while(l<=r)
{
int mid=(l+r)>>;
if(hash[mid]<x)l=mid+;
else if(hash[mid]>x)r=mid-;
else return mid;
}
}
void insert(int k,int l,int r,int t)//0横线,1竖线
{
if(!k){s[++cnt].x=find(l);s[cnt].r=find(r);s[cnt].y=t;}
else{
s[++cnt].x=find(t);s[cnt].y=l;s[cnt].k=;
s[++cnt].x=find(t);s[cnt].y=r;s[cnt].k=-;
}
}
void build()
{
sort(a+,a+n+,cmp1);
for(int i=;i<=n;i++)
if(a[i].x==a[i-].x)
insert(,a[i-].y,a[i].y,a[i].x);
sort(a+,a+n+,cmp2);
for(int i=;i<=n;i++)
if(a[i].y==a[i-].y)
insert(,a[i-].x,a[i].x,a[i].y);
}
int lowbit(int x){return x&(-x);}
void update(int x,int y)
{
while(x<=n)
{
tr[x]+=y;
x+=lowbit(x);
}
}
int ask(int x)
{
int s=;
while(x)
{
s+=tr[x];
x-=lowbit(x);
}
return s;
}
void work()
{
for(int i=;i<=cnt;i++)
{
if(!s[i].k)ans+=ask(s[i].r-)-ask(s[i].x);
else update(s[i].x,s[i].k);
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
hash[i]=a[i].x;
}
sort(hash+,hash+n+);
build();
sort(s+,s+cnt+,cmp3);
work();
printf("%d",ans+n);
}
bzoj 1818 Cqoi2010 内部白点 扫描线的更多相关文章
- BZOJ 1818: [Cqoi2010]内部白点 扫描线+树状数组
问题转化为求每一个极长横线段与极长纵线段的交点个数. 这个东西用扫描线+树状数组维护一下就可以了. code: #include <cstdio> #include <algorit ...
- BZOJ 1818: [Cqoi2010]内部白点 (BIT + 扫描线)
就是求多条线段的交点数,直接BIT+扫描线就行了. 注意不要算重最初存在的点. CODE #include<bits/stdc++.h> using namespace std; char ...
- bzoj 1818: [Cqoi2010]内部白点
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; struc ...
- BZOJ 1818: [Cqoi2010]内部白点(树状数组)
传送门 解题思路 首先一定不可能有\(-1\)的情况,因为新产生的黑点不会造成任何贡献,它的各个方面都是不优的.那么只需要统计一遍答案,首先要将横坐标相同的两个点看成一条竖线,纵坐标相同的点看成一条横 ...
- 【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组
[BZOJ1818][Cqoi2010]内部白点 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变 ...
- 【BZOJ】1818: [Cqoi2010]内部白点(树状数组+离散+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1818 这一题一开始我就看错了,bzoj的那个绝对值109简直坑人,应该是10^9,我直接写了个暴力. ...
- 1818: [Cqoi2010]内部白点
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1394 Solved: 625 [Submit][Status][Discuss] Descriptio ...
- 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\)就是在搞笑的. 那么对于每一行,我们显然可以处理出来最左和最右的点,那么等价于我们在横着 ...
随机推荐
- java字符串拼接技巧(StringBuilder使用技巧)
在平时的开发中,我们可能会遇到需要拼接如下格式的字符串(至少我是遇到了很多次): 1,2,3,4,5,6,7,8,9,10,11,12,12,12,12,34,234,2134,1234,1324,1 ...
- 基于BranchTraceStore机制的CPU执行分支追踪工具 —— CpuWhere [修正版 仅驱动]
[前言] 在张银奎老师的<软件调试>一书中,详细地讲解了使用内存的分支记录机制——BTS机制(5.3),并且给出了示例工具CpuWhere及其源代码.但实际运行(VMware XP_SP3 ...
- 安卓统一推送联盟融云成唯一IM云服务企业
10月16日,安卓统一推送联盟在北京正式成立,来自中国信息通信研究院,华为.小米.OPPO等手机厂商,BAT等互联网巨头公司等75家机构及企业代表参加了联盟成立大会,融云也受邀参会并成为首批成员单位中 ...
- 导致实例逐出的五大问题 (文档 ID 1526186.1)
适用于: Oracle Database - Enterprise Edition - 版本 10.2.0.1 到 11.2.0.3 [发行版 10.2 到 11.2]本文档所含信息适用于所有平台 用 ...
- 补题—Codeforces Round #346 (Div. 2) _智商欠费系列
这次的题目相对容易 但是智商依旧不够用 原因有三点 1.英文水平堪忧 2 逻辑不严密 3 细节掌握不够好 传送门 http://codeforces.com/contest/659 A 题目大意 圆环 ...
- 数据倾斜是多么痛?spark作业调优秘籍
目录视图 摘要视图 订阅 [观点]物联网与大数据将助推工业应用的崛起,你认同么? CSDN日报20170703——<从高考到程序员——我一直在寻找答案> [直播]探究L ...
- 6.python
最早的'密码本' ascii 涵盖了英文字母大小写,特殊字符,数字.01010101ascii 只能表示256种可能,太少,创办了万国码 unicode 16表示一个字符不行,32位表示一个字符. A ...
- win10文件共享的实现
1)启动网络发现 打开网络共享中心->更改高级共享设置->修改如下 2)如果需要其他客户端无密码访问 修改如下: 3)如果打算使用Guest访问 用户帐户->管理帐户 ...
- python--BOM和DOM
一. 介绍 什么是BOM和DOM? 简要答案:BOM是浏览器对象模型,用来获取或设置浏览器的属性.行为,例如:新建窗口.获取屏幕分辨率.浏览器版本号等. DOM是文档对象模型,用来获取或设置文档中标签 ...
- 我的第一个ajax脚本
代码如下 //创建XMLHttpRequest对象 var xmlHttp=null; function creatXMLHttp(){ try{ xmlHttp = new XMLHttpReque ...