#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. QQLogin

    import java.awt.*; import javax.swing.*; public class QQLogin extends JFrame{ QQLogin(){ this.setSiz ...

  2. Linux下查看文件权限、修改文件权限的方法

    查看权限命令查看目录的相关权限可以采用命令ls -lD,或者直接用ls -la 如 ls -l www.jb51.net  //这里表示查看www.jb51.net目录 修改权限命令 chmod 77 ...

  3. 2015苹果WWDC开发者大会

    2015苹果WWDC开发者大会 (1)本届主题为“the epicenter of change(变革的中心)” (2)iOS 9.OS X.watchOS三款重要系统更新以及其他服务 (3)iOS ...

  4. git的作用和原理(待续)

    先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令: $ sudo git init --bare sample.git Git就会创建一个裸仓库,裸仓库没有 ...

  5. bzoj2154(莫比乌斯反演)

    又是一道经典题. 1.学习了下O(n) 的做法. // // main.cpp // bzoj2154 // // Created by New_Life on 16/7/7. // Copyrigh ...

  6. hdfs namenode -initializeSharedEdits 和 hdfs namenode -bootstrapStandby

    hdfs namenode -initializeSharedEdits 将所有journal node的元文件的VERSION文件的参数修改成与namenode的元数据相同 hdfs namenod ...

  7. Spring的线程池ThreadPoolTaskExecutor使用案例

    1.Sping配置文件 <!-- 线程池配置 --> <bean id="threadPool" class="org.springframework. ...

  8. dom4j解析xml作为测试数据

    构造函数: public AppTestData(File xmlFile) throws Exception { file = xmlFile; try { saxReader = new SAXR ...

  9. b.BIO连接器整体框图

    上一讲讲解过NIO的框图,可以看来,NIO通道是目前Tomcat7以后的默认的通道的推荐配置,在Tomcat6和以前的配置中,BIO是主流的配置: 只需要修改protocol协议部分即可,而后续还有A ...

  10. linux笔记:链接命令,软链接和硬链接

    命令名称:ln功能:生成链接文件命令所在目录:/bin/ln用法:ln [-s] 原文件 目标文件参数:-s 创建软链接(不写此参数则生成硬链接) 软链接:类似windows中的快捷方式.它只是一个链 ...