不存在-1的情况,而且最多一轮就结束了。如果新增加的黑点v0会产生新的黑点v1,那么v0和v1肯定是在一条轴上的,而原来这条轴上已经有黑点了。

离散以后扫描线统计,往线段上插点,然后查询区间上点数。

不妨以x为主轴,用一条条平行于y轴的线去扫。

按照x为主y为副排序以后,记录下标,将下标按y为主排序,为的是把y相同的一系列点变成一个入点(d[id] = 1),一个出点(d[id] = -1),

可能某个相同y值的点只有一个,所以最后的出点 -= 1。

点可能有重复,判重的话就标记一下平行x轴的线。

/*********************************************************
* ------------------ *
* author AbyssalFish *
**********************************************************/
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<numeric>
using namespace std; const int maxn = 1e5; typedef long long ll;
typedef pair<int,int> Point;
#define xc first
#define yc second
Point p[maxn];
int ys[maxn], d[maxn]; //discrete y, scan line
int n;
int r[maxn]; bool cmp(int a,int b)
{
return p[a].yc < p[b].yc || (p[a].yc == p[b].yc && p[a].xc < p[b].xc);
} int C[maxn+], n0;
bool vis[maxn+]; int sum(int x)
{
int re = ;
while(x > ){
re += C[x]; x &= x-;
}
return re;
} void add(int x,int d)
{
while(x <= n0){
C[x] += d;
x += x&-x;
}
} void solve()
{
for(int i = ; i < n; i++){
scanf("%d%d",&p[i].xc,&p[i].yc);
r[i] = i;
}
//compress
sort(p,p+n);
sort(r,r+n,cmp);
ys[r[]] = ; d[r[]] = ;
for(int i = ; i < n; i++){
ys[r[i]] = ys[r[i-]];
if(p[r[i]].yc != p[r[i-]].yc) {
d[r[i-]] -= ;
ys[r[i]]++;
d[r[i]] = ;
}
}
n0 = ys[r[n-]];
d[r[n-]] -= ;
//memset(C+1,0,sizeof(int)*n0); ll ans = n;
for(int i = , j; i < n;){
j = i;
while(j < n && p[j].xc == p[i].xc) { //不包含端点
if(d[j] < ) {
vis[ys[j]] = false;
add(ys[j], -);
}
j++;
}
if(ys[i] < ys[j-]-) {
ans += sum(ys[j-]-) - sum(ys[i]);
for(int k = i+; k < j-; k++){ //去重
if(vis[ys[k]]) ans--;
}
}
while(i < j) {
if(d[i] > ) {
add(ys[i],);
vis[ys[i]] = true;
}
i++;
}
}
printf("%I64d\n", ans);
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
scanf("%d", &n);
solve();
return ;
}

POJ - 3109 Inner Vertices的更多相关文章

  1. POJ 2109 Inner Vertices(扫描线+树状数组)

    [题目链接] http://poj.org/problem?id=3109 [题目大意] 在一个棋盘上放满白子,现在把一些白子变成黑子, 如果一个白子上下左右都有黑子,就会变成黑子,问最终黑子个数 [ ...

  2. poj 3109

                                                                                                         ...

  3. poj很好很有层次感(转)

    OJ上的一些水题(可用来练手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 30 ...

  4. POJ题目分类推荐 (很好很有层次感)

    著名题单,最初来源不详.直接来源:http://blog.csdn.net/a1dark/article/details/11714009 OJ上的一些水题(可用来练手和增加自信) (POJ 3299 ...

  5. 计算几何--求凸包模板--Graham算法--poj 1113

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28157   Accepted: 9401 Description ...

  6. poj 1113:Wall(计算几何,求凸包周长)

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28462   Accepted: 9498 Description ...

  7. 【POJ】1113 Wall(凸包)

    http://poj.org/problem?id=1113 答案是凸包周长+半径为l的圆的周长... 证明?这是个坑.. #include <cstdio> #include <c ...

  8. 【POJ】2954 Triangle(pick定理)

    http://poj.org/problem?id=2954 表示我交了20+次... 为什么呢?因为多组数据我是这样判断的:da=sum{a[i].x+a[i].y},然后!da就表示没有数据了QA ...

  9. poj 1179 Polygon

    http://poj.org/problem?id=1179 Polygon Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...

随机推荐

  1. oracle序列的缓存

    在高并发的数据库系统中,序列的缓存也要相应的调大.现在看看数据库自己的一个高并发序列的定义. 当我们向数据库发送一个请求时,监听接待,然后oracle会启动一个后台进程(这个进程就是通常所说的数据库并 ...

  2. Silverlight 减小 Xap 的大小

    当Silverlight工程引用了很多dll后,加载的速度就会很慢,通过下面方式可以减小xap包的大小 勾选 “通过使用应用程序库缓存减小xap大小”,勾选此项后vs会自动将微软自身和外部引用不变的d ...

  3. Barty's Computer 字典树

    https://nanti.jisuanke.com/t/17122 Barty have a computer, it can do these two things. Add a new stri ...

  4. 安卓压力测试之monkey

    步骤: 1.把要测试的apk包放在 SDK-platfrom-tools下 2.配置adb.exe的环境变量 3.手机连接上电脑(虚拟机和真机只能连接一个) 4.运行:adb devices   查看 ...

  5. 案例50-crm练习dao层的抽取BaseDao

    1 抽取BaseDao 2 BaseDao设计思路 3 BaseDao接口书写 package www.test.dao; import java.io.Serializable; import ja ...

  6. Linux禁ping

    A.临时允许PING操作的命令为:# >/proc/sys/net/ipv4/icmp_echo_ignore_all B.永久允许PING配置方法. /etc/sysctl.conf 中增加一 ...

  7. InnoDB还是MyISAM?

    两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用. 我作为使用MySQL的用户角度出发,Innodb和My ...

  8. Jetty数据同步使用

    1. Jetty简介 Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形 ...

  9. 【防火墙】DMZ

    DMZ是英文“demilitarized zone”的缩写,中文名称为“隔离区”,也称“非军事化区”.它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题,而设立的一个非安全系统与安 ...

  10. Hibernate课程 初探一对多映射3-1 单向多对一简介

    多对一的关系和关系数据库中的外键参照关系最匹配,即在己方的表中的一个外键参照另一个表中的主键! 通过在多方持有一方的引用来实现,需要在多的一方使用<many-to-one>来配置