BZOJ 1818: [Cqoi2010]内部白点 扫描线+树状数组
问题转化为求每一个极长横线段与极长纵线段的交点个数.
这个东西用扫描线+树状数组维护一下就可以了.
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]内部白点 扫描线+树状数组的更多相关文章
- 【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组
[BZOJ1818][Cqoi2010]内部白点 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变 ...
- 【BZOJ】1818: [Cqoi2010]内部白点(树状数组+离散+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1818 这一题一开始我就看错了,bzoj的那个绝对值109简直坑人,应该是10^9,我直接写了个暴力. ...
- 【BZOJ1818】[CQOI2010]内部白点(树状数组,扫描线)
[BZOJ1818][CQOI2010]内部白点(树状数组,扫描线) 题面 BZOJ 题解 不难发现\(-1\)就是在搞笑的. 那么对于每一行,我们显然可以处理出来最左和最右的点,那么等价于我们在横着 ...
- Bzoj1818: [Cqoi2010]内部白点 && Tyvj P2637 内部白点 扫描线,树状数组,离散化
1818: [Cqoi2010]内部白点 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 704 Solved: 344[Submit][Status] ...
- bzoj 1818 [CQOI 2010] 内部白点 - 扫描线 - 树状数组
题目传送门 快速的列车 慢速的列车 题目大意 一个无限大的方格图内有$n$个黑点.问有多少个位置上下左右至少有一个黑点或本来是黑点. 扫描线是显然的. 考虑一下横着的线段,取它两个端点,横坐标小的地方 ...
- bzoj 1818 Cqoi2010 内部白点 扫描线
[Cqoi2010]内部白点 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1126 Solved: 530[Submit][Status][Disc ...
- BZOJ 1818: [Cqoi2010]内部白点(树状数组)
传送门 解题思路 首先一定不可能有\(-1\)的情况,因为新产生的黑点不会造成任何贡献,它的各个方面都是不优的.那么只需要统计一遍答案,首先要将横坐标相同的两个点看成一条竖线,纵坐标相同的点看成一条横 ...
- bzoj 1818: [Cqoi2010]内部白点
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; struc ...
- BZOJ 1818 内部白点(离散化+树状数组)
此题就是1227 的弱化版. 画个图或者稍微证明一下就能够知道,一定不会超过一次变换. 那么我们只需要统计有多少个白点会变黑,换句话说就是有多少个白点上下左右都有黑点. 离散化横坐标,因为没有黑点在的 ...
随机推荐
- C语言输入单字符避免回车的四种方法
在scanf()中使用'\n'屏蔽回车符号. scanf("%d\n", &n); scanf("%c", &c); 2.在scanf()格式串 ...
- scala基础题--面向对象2
练习2:根据下图实现类.在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积 import scala.beans.BeanProperty objec ...
- SQL分类之DML:增删改表中的数据
DML:增删改表中的数据 1.添加数据: 语法: insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n): 注意: 1.列名和值要一一对应. 2.如果表名 ...
- sqlserver apply
IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb go CREATE TABLE tb(name VARCHAR(10),value VARCHAR(200)) ...
- 用Python程序温度转换实例
实例:温度转换 (1)分析问题:利用程序进行温度转换,由用户输入温度值,程序给出输出结果:通过语音识别,图像识别等方法自动监听并获得温度信息发布渠道(如收音机.电视机)给出的温度播报源数据,再由程序装 ...
- Web负载均衡学习笔记之K8S内Ngnix微服务服务超时问题
0x00 概述 本文是从K8S内微服务的角度讨论Nginx超时的问题 0x01 问题 在K8S内部署微服务后,发现部分微服务链接超时,Connection Time Out. 最近碰到了一个 Ngin ...
- 一次golang应用的docker部署经历
开发平台win10,服务器centos7.5 编写dockerfile # scratch 为空镜像,因为golang的build的可执行文件不需要什么环境 FROM scratch # 作者署名 M ...
- 全程实操cdh5.14.4中集成安装kylin2.4.1与使用测试
在cdh5.14.4安装完成并排错完成的情况下,进行如下kylin安装操作: 1.实验环境 三台CentOS 7主机,IP地址 192.168.43.129 cm1 192.168.43.130 cm ...
- Tomcat配置https加密连接
配置https安全连接(ssl加密连接) https连接需要用到数字证书与数字签名(MD5算法),网站https连接首先需要申请数字证书,配置加密连接器,浏览器安装证书. 证书运用到RSA技术,RSA ...
- Matlab享元模式
享元模式(Flyweight)通过共享技术实现相同或相似对象的重用,可以减少创建对象的数量,以减少内存占用和提高性能.Java String的常量池,python logging,线程池,数据库连接池 ...