#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]内部白点的更多相关文章

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

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

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

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

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

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

  4. BZOJ 1818: [Cqoi2010]内部白点(树状数组)

    传送门 解题思路 首先一定不可能有\(-1\)的情况,因为新产生的黑点不会造成任何贡献,它的各个方面都是不优的.那么只需要统计一遍答案,首先要将横坐标相同的两个点看成一条竖线,纵坐标相同的点看成一条横 ...

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

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

  6. 1818: [Cqoi2010]内部白点

    Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1394 Solved: 625 [Submit][Status][Discuss] Descriptio ...

  7. Bzoj1818: [Cqoi2010]内部白点 && Tyvj P2637 内部白点 扫描线,树状数组,离散化

    1818: [Cqoi2010]内部白点 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 704  Solved: 344[Submit][Status] ...

  8. 【BZOJ1818】[CQOI2010]内部白点(树状数组,扫描线)

    [BZOJ1818][CQOI2010]内部白点(树状数组,扫描线) 题面 BZOJ 题解 不难发现\(-1\)就是在搞笑的. 那么对于每一行,我们显然可以处理出来最左和最右的点,那么等价于我们在横着 ...

  9. 【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组

    [BZOJ1818][Cqoi2010]内部白点 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变 ...

随机推荐

  1. Git学习(3)创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...

  2. 集群--LVS的DR模型配置

    1.查看内核是否有IPVS内核模块 grep -i 'ip_vs' /boot/config-2.6.32-431.el6.x86_64

  3. /dev/sda3: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

    系统强制断电后,出现以下错误: /dev/sda3: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY 启动系统后在字符界面有两个选项,输入root密码进入维护模 ...

  4. form作为module name 悲剧了

    爆出很无语的错误,也怪我,没有实地的debug. 所以,module name应该是不能碰关键词类似,最好custom一点好.

  5. php 使用 restler 框架构建 restfull api

    php 使用 restler 框架构建 restfull api restler 轻量级,小巧,构建restfull api非常方便! 官网:http://restler3.luracast.com/ ...

  6. CAS原理全面分析

    http://blog.chinaunix.net/uid-22816738-id-3525939.html 上文对CAS各方面原理做了很详细.很明了分析,包括CAS架构.认证协议.安全性.登录.认证 ...

  7. dedecms 模板文件不存在,无法解析文档"的终极各种解决办法

    方法一:[此对应喜欢把模板文件使用".html"的格式,]  /include/arc.archives.class.php 556行    if (!preg_match(&qu ...

  8. Linux下修改系统时间并写入BIOS

    我们一般使用“date -s”命令来修改系统时间.比如将系统时间设定成2005年7月26日的命令如下. #date -s 07/26/2005 将系统时间设定成下午11点12分0秒的命令如下. #da ...

  9. [redis] redis 存取键值对常用的三种使用方式 - Jedis、JedisPool、Jedis分布式

    |-Jedis 普通方式 |-JedisPool 连接池方式(需要引入pool相关jar) |-Jedis 分布式 (需要引入pool相关jar) 引入jedis2.7.0和commons.pool2 ...

  10. linux下shell统计文件目录下所有代码行数

    功能,统计某一目录下所有文件代码行数: 例如统计某一目录下所有.c结尾的文件代码行数:find . -name "*.c"|xargs cat|grep -v ^$|wc -l ^ ...