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

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

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. 大一0基础小白用最基础C写哥德巴赫猜想

    #include <stdio.h>int main (){ int a,b,c,k,count1,count2; for(a=4;a<=1200;a=a+2){ for(b=2;b ...

  2. Dubbo快速入门 二

    2.dubbo核心概念 2.1).简介 Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调 ...

  3. Django 模板语言 变量名称

    Django 模板语言 变量名称 模板语言中已变量形式显示 # view 文件内 def func(request): return render(request,"index.html&q ...

  4. 『正睿OI 2019SC Day8-Day17』

    于是就迎来\(10\)天的自闭考试了,每天写点小总结吧. Day8 第一天就很自闭啊,考题分别是数学题+建模题+图论. 前两道题都没有什么算法,但是难度还是有的,于是就做不太出来,特别是第一题.第二题 ...

  5. golang ---Learn Concurrency

    https://github.com/golang/go/wiki/LearnConcurrency 实例1: package main import ( "fmt" " ...

  6. Java开发月薪2W的知乎讨论记录截取

    1. 推荐看 作者:匿名用户 链接:https://www.zhihu.com/question/39890405/answer/83676977 来源:知乎 著作权归作者所有.商业转载请联系作者获得 ...

  7. docker 安装tomcat容器和mysql容器

    1. docker pull mysql:5.6 2.docker run -p 3306:3306 --name mysql -v /data/mysql/conf:/etc/mysql/conf. ...

  8. SpringBoot 入门篇(二) SpringBoot常用注解以及自动配置

    一.SpringBoot常用注解二.SpringBoot自动配置机制SpringBoot版本:1.5.13.RELEASE 对应官方文档链接:https://docs.spring.io/spring ...

  9. ES6的新特性

    ECMAScript 6(简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,又称ECMAScript 2015.ES6就是ES2015. 虽然目前并不是所有 ...

  10. OpenFire后台插件上传获取webshell及免密码登录linux服务器

    1.目标获取 (1)fofa.so网站使用搜索body="Openfire, 版本: " && country=JP,可以获取日本存在的Openfire服务器.如图 ...