问题转化为求每一个极长横线段与极长纵线段的交点个数.

这个东西用扫描线+树状数组维护一下就可以了.

code:

#include <cstdio>
#include <algorithm>
#define N 200005
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
namespace BIT
{
int C[N];
int lowbit(int t) { return t&(-t); }
void update(int x,int v)
{
for(;x<N;x+=lowbit(x)) C[x]+=v;
}
int query(int x)
{
int tmp=0;
for(;x>0;x-=lowbit(x)) tmp+=C[x];
return tmp;
}
};
struct Point
{
int x,y;
Point(int x=0,int y=0):x(x),y(y){}
}point[N];
struct Line
{
int x,y,z,pri;
Line(int x=0,int y=0,int z=0,int pri=0):x(x),y(y),z(z),pri(pri){}
}line[N<<1];
bool cmpy(Point a,Point b)
{
return a.y==b.y?a.x<b.x:a.y<b.y;
}
bool cmpx(Point a,Point b)
{
return a.x==b.x?a.y<b.y:a.x<b.x;
}
bool cmpl(Line a,Line b)
{
return a.x==b.x?a.pri<b.pri:a.x<b.x;
}
int A[N];
int main()
{
// setIO("input");
int i,j,n,cnt=0,ans=0;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d%d",&point[i].x,&point[i].y);
A[i]=point[i].y;
}
sort(A+1,A+1+n);
for(i=1;i<=n;++i)
{
point[i].y=lower_bound(A+1,A+1+n,point[i].y)-A;
}
sort(point+1,point+1+n,cmpy);
for(i=1;i<=n;i=j+1)
{
j=i;
while(j<n&&point[j+1].y==point[i].y) ++j;
line[++cnt]=Line(point[i].x,point[i].y,0,1);
line[++cnt]=Line(point[j].x,point[j].y,0,3);
}
sort(point+1,point+1+n,cmpx);
for(i=1;i<=n;i=j+1)
{
j=i;
while(j<n&&point[j+1].x==point[i].x) ++j;
line[++cnt]=Line(point[i].x,point[j].y,point[i].y,2);
}
sort(line+1,line+1+cnt,cmpl);
for(i=1;i<=cnt;++i)
{
if(line[i].pri==2)
{
ans+=BIT::query(line[i].y)-BIT::query(line[i].z-1);
}
else
{
if(line[i].pri==1) BIT::update(line[i].y,1);
else BIT::update(line[i].y,-1);
}
}
printf("%d\n",ans);
return 0;
}

  

BZOJ 1818: [Cqoi2010]内部白点 扫描线+树状数组的更多相关文章

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

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

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

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

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

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

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

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

  5. bzoj 1818 [CQOI 2010] 内部白点 - 扫描线 - 树状数组

    题目传送门 快速的列车 慢速的列车 题目大意 一个无限大的方格图内有$n$个黑点.问有多少个位置上下左右至少有一个黑点或本来是黑点. 扫描线是显然的. 考虑一下横着的线段,取它两个端点,横坐标小的地方 ...

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

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

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

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

  8. bzoj 1818: [Cqoi2010]内部白点

    #include<cstdio> #include<iostream> #include<algorithm> using namespace std; struc ...

  9. BZOJ 1818 内部白点(离散化+树状数组)

    此题就是1227 的弱化版. 画个图或者稍微证明一下就能够知道,一定不会超过一次变换. 那么我们只需要统计有多少个白点会变黑,换句话说就是有多少个白点上下左右都有黑点. 离散化横坐标,因为没有黑点在的 ...

随机推荐

  1. vue mint-ui 框架下拉刷新上拉加载组件的使用

    安装 npm i mint-ui -S 然后在main.js中引入 import MintUI from 'mint-ui' import 'mint-ui/lib/style.css' Vue.us ...

  2. 【题解】最长递增路径 [51nod1274]

    [题解]最长递增路径 [51nod1274] 传送门:最长递增路径 \([51nod1274]\) [题目描述] 一个可能有自环有重边的无向图,每条边都有边权.输入两个整数 \(n,m\) 表示一共 ...

  3. Java的常用API

    Object类 1.toString方法在我们直接使用输出语句输出对象的时候,其实通过该对象调用了其toString()方法. 2.equals方法方法摘要:类默认继承了Object类,所以可以使用O ...

  4. Direct Buffer介绍

    Direct Buffer 前言 上篇文章Buffer末尾中谈到堆内Buffer(Heap Buffer)和直接Buffer(Direct Buffer)的概念,但是却一笔带过,并未涉及其细节,这篇文 ...

  5. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题

    Spring AOP底层的动态代理实现有两种方式:一种是JDK动态代理,另一种是CGLib动态代理. JDK动态代理 JDK 1.3版本以后提供了动态代理,允许开发者在运行期创建接口的代理实例,而且只 ...

  6. NETCore执行Shell修改Centos系统IP信息

    原文:NETCore执行Shell修改Centos系统IP信息 目录 shell代码 NETCore执行Shell文件 注意事项 shell代码 首先通过find命令找到/etc/sysconfig/ ...

  7. VMware Workstation报错 : 另一个正在运行的VMware进程可能正在使用配置文件

    这个问题出现于虚拟机卡死后用任务管理器关闭了VMware,然而还有虚拟机的进程在运行而且还关不掉(三步操作便可解决这一问题) 一.打开系统配置使用程序进行设置 1.Win+R打开运行输入:msconf ...

  8. person类与其子类在使用中的内存情况(含java的改写和c#的屏蔽)

    JAVA 普通person类及调用代码: public class Person { public String xm; public int nl; public void setme(String ...

  9. 类例程_java战斗程序

    代码如下: package t11; import java.util.Random; public class Fight { String name; int life, attack, spee ...

  10. box-shadow 模糊半径与扩展半径

    关于box-shadow的基本用法参阅CSS3 box-shadow一章节. 此属性用来设置元素的阴影效果,语法结构如下: box-shadow:h-shadow v-shadow blur spre ...