bzoj 1818: [Cqoi2010]内部白点
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct data
{
int x,y,k,r;
}a[];
struct dat
{
int x,y;
}b[];
bool cmp(dat a1,dat a2)
{
if(a1.x==a2.x)
return a1.y<a2.y;
return a1.x<a2.x;
}
int n,h[],h1[],shu[],cnt,ans;
void jia1(int a1,int a2)
{
cnt++;
a[cnt].x=lower_bound(h+,h+h[]+,b[a1].x)-h;
a[cnt].y=b[a1].y;
a[cnt].k=;
cnt++;
a[cnt].x=a[cnt-].x;
a[cnt].y=b[a2].y;
a[cnt].k=-;
}
bool cmp1(dat a1,dat a2)
{
if(a1.y==a2.y)
return a1.x<a2.x;
return a1.y<a2.y;
}
void jia2(int a1,int a2)
{
cnt++;
a[cnt].y=b[a1].y;
a[cnt].x=lower_bound(h+,h+h[]+,b[a1].x)-h;
a[cnt].r=lower_bound(h+,h+h[]+,b[a2].x)-h;
}
bool cmp2(data a1,data a2)
{
if(a1.y==a2.y)
return a1.k<a2.k;
return a1.y<a2.y;
}
int zhao(int a1)
{
int sum=;
for(;a1;a1-=a1&-a1)
sum+=shu[a1];
return sum;
}
void gai(int a1,int a2)
{
for(;a1<=h[];a1+=a1&-a1)
shu[a1]+=a2;
return;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&b[i].x,&b[i].y);
for(int i=;i<=n;i++)
h1[i]=b[i].x;
sort(h1+,h1++n);
h[]=h1[];
h[]=;
for(int i=;i<=n;i++)
if(h1[i]!=h1[i-])
{
h[]++;
h[h[]]=h1[i];
}
sort(b+,b+n+,cmp);
for(int i=;i<=n;i++)
if(b[i].x==b[i-].x)
jia1(i-,i);
sort(b+,b+n+,cmp1);
for(int i=;i<=n;i++)
if(b[i].y==b[i-].y)
jia2(i-,i);
sort(a+,a+cnt+,cmp2);
for(int i=;i<=cnt;i++)
if(a[i].k==)
ans+=zhao(a[i].r-)-zhao(a[i].x);
else
gai(a[i].x,a[i].k);
printf("%d",ans+n);
return ;
}
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct data
{
int x,y,k,r;
}a[];
struct dat
{
int x,y;
}b[];
bool cmp(dat a1,dat a2)
{
if(a1.x==a2.x)
return a1.y<a2.y;
return a1.x<a2.x;
}
int n,h[],h1[],shu[],cnt,ans;
void jia1(int a1,int a2)
{
cnt++;
a[cnt].x=lower_bound(h+,h+h[]+,b[a1].x)-h;
a[cnt].y=b[a1].y;
a[cnt].k=;
cnt++;
a[cnt].x=a[cnt-].x;
a[cnt].y=b[a2].y;
a[cnt].k=-;
}
bool cmp1(dat a1,dat a2)
{
if(a1.y==a2.y)
return a1.x<a2.x;
return a1.y<a2.y;
}
void jia2(int a1,int a2)
{
cnt++;
a[cnt].y=b[a1].y;
a[cnt].x=lower_bound(h+,h+h[]+,b[a1].x)-h;
a[cnt].r=lower_bound(h+,h+h[]+,b[a2].x)-h;
}
bool cmp2(data a1,data a2)
{
if(a1.y==a2.y)
return a1.k<a2.k;
return a1.y<a2.y;
}
int zhao(int a1)
{
int sum=;
for(;a1;a1-=a1&-a1)
sum+=shu[a1];
return sum;
}
void gai(int a1,int a2)
{
for(;a1<=h[];a1+=a1&-a1)
shu[a1]+=a2;
return;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&b[i].x,&b[i].y);
for(int i=;i<=n;i++)
h1[i]=b[i].x;
sort(h1+,h1++n);
h[]=h1[];
h[]=;
for(int i=;i<=n;i++)
if(h1[i]!=h1[i-])
{
h[]++;
h[h[]]=h1[i];
}
sort(b+,b+n+,cmp);
for(int i=;i<=n;i++)
if(b[i].x==b[i-].x)
jia1(i-,i);
sort(b+,b+n+,cmp1);
for(int i=;i<=n;i++)
if(b[i].y==b[i-].y)
jia2(i-,i);
sort(a+,a+cnt+,cmp2);
for(int i=;i<=cnt;i++)
if(a[i].k==)
ans+=zhao(a[i].r-)-zhao(a[i].x);
else
gai(a[i].x,a[i].k);
printf("%d",ans+n);
return ;
}
将点拆成横线与点,用树状数组维护。
bzoj 1818: [Cqoi2010]内部白点的更多相关文章
- bzoj 1818 Cqoi2010 内部白点 扫描线
[Cqoi2010]内部白点 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1126 Solved: 530[Submit][Status][Disc ...
- 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]内部白点(树状数组)
传送门 解题思路 首先一定不可能有\(-1\)的情况,因为新产生的黑点不会造成任何贡献,它的各个方面都是不优的.那么只需要统计一遍答案,首先要将横坐标相同的两个点看成一条竖线,纵坐标相同的点看成一条横 ...
- 【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\)就是在搞笑的. 那么对于每一行,我们显然可以处理出来最左和最右的点,那么等价于我们在横着 ...
- 【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组
[BZOJ1818][Cqoi2010]内部白点 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变 ...
随机推荐
- Google账户_GooglePlay_关联
PS:这过程叫一个折腾...穷逼的无奈啊... 1. 1.1. 网上搜到说,安装 google play & google框架服务,手机需要root,没去证实这个事情... 用了之前的 And ...
- hdu5406 CRB and Apple dp+两个LIS
题意转换为:给定n个数,求两个最长的不相交的LIS. 先说经典题一个LIS的nlogn做法.枚举当前数,若比末尾数大,插入末尾,否则二分查找,插入合适位置. 通过此题,我们有了一个用树状数组或线段树+ ...
- Oracle存储过程中异步调用的实际操作步骤
本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用 .而有些相关的业务逻辑 ...
- Poco C++——JSON解析
#include <iostream> #include "Poco/Dynamic/Var.h" #include "Poco/Dynamic/Pair.h ...
- 牛客网 --java问答题
http://www.nowcoder.com/ 主要是自己什么都不怎么会.在这里可以学习很多的! 第一天看题自己回答,第二天看牛客网的答案! 1 什么是Java虚拟机?为什么Java被称作是“平台无 ...
- SecureCRT设置
SecureCRT设置 文章来源:http://blog.csdn.net/dongqinliuzi/article/details/39890569 本文主要介绍SecureCRT的使用方法和技巧. ...
- html文本框(input)不保存缓存记录
有的时候js往文本框里赋值,结果在火狐中刷新后,刚才赋的值还在,导致好多麻烦的事情,现总结一下解决办法如下: <input name="bestlovesky" type= ...
- R语言实战
教材目录 第一部分 入门 第一章 R语言介绍 第二章 创建数据集 第三章 图形初阶 第四章 基本数据管理 第五章 高级数据管理 第二部分 基本方法 第六章 基本图形 第七章 基本统计方法 第三部分 中 ...
- linux笔记:linux常用命令-关机重启命令
关机重启命令:shutdown(关机或者重启) 其他关机命令: 其他重启命令: 系统运行级别: 修改系统默认运行级别和查询系统运行级别: 退出登录命令:logout(退出登录)
- DI 之 3.3 更多DI的知识(柒)
3.3.3 自动装配 3.3.4 依赖检查 3.3.5 方法注入