poj2464扫描线好题,树状数组解法
用树状数组解比线段树快了好多,难度也下降许多
分别用两个树状数组维护当前扫描线左侧和右侧的点,离散化y轴即可
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define maxn 200005
struct node{
int x,y;
bool operator<(const node p)const {
return x<p.x;
}
}p[maxn];
int y[maxn],cnt,n;
int l[maxn],r[maxn];//两个树状数组维护扫描线左边的点数,右边的点数
void add(int *bit,int x,int num){
for(int i=x;i<=cnt+;i+=i&-i)
bit[i]+=num;
}
int sum(int *bit,int x){
int res=;
for(int i=x;i;i-=i&-i)
res+=bit[i];
return res;
} int main(){
while(scanf("%d",&n),n){
memset(l,,sizeof l);
memset(r,,sizeof r);
for(int i=;i<n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
y[i]=p[i].y;
}
sort(p,p+n);sort(y,y+n);
cnt=unique(y,y+n)-y;//离散化y轴
for(int i=;i<n;i++)
add(r,lower_bound(y,y+cnt,p[i].y)-y+,);
int Stan=-,st=;
vector<int>Ollie;
for(int i=;i<=n;i++){
if(i==n || p[i].x!=p[i-].x){//一条竖线上的点统一处理
for(int j=st;j<i;j++)
add(r,lower_bound(y,y+cnt,p[j].y)-y+,-);//把这条线上的点从r数组删去
int stan=-,ollie=-;
for(int j=st;j<i;j++){
int pos=lower_bound(y,y+cnt,p[j].y)-y+;
int a=sum(r,cnt)-sum(r,pos)+sum(l,pos-);
int b=sum(l,cnt)-sum(l,pos)+sum(r,pos-);
if(b==ollie) stan=min(stan,a);//使stan得分最小化
else if(b>ollie) stan=a,ollie=b;//使Ollie得分最大化
}
if(stan>Stan){Stan=stan;Ollie.clear();}//stan得分更新后同时跟新Ollie得分
if(stan==Stan)Ollie.push_back(ollie);
for(int j=st;j<i;j++)//最后把这条线上的点加入l数组
add(l,lower_bound(y,y+cnt,p[j].y)-y+,);
st=i;
}
}
printf("Stan: %d; Ollie:",Stan);
sort(Ollie.begin(), Ollie.end());
cnt=unique(Ollie.begin(), Ollie.end())-Ollie.begin();
for(int i=;i<cnt;i++) printf(" %d",Ollie[i]);
puts(";");
}
return ;
}
poj2464扫描线好题,树状数组解法的更多相关文章
- 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询
题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...
- BZOJ 2758 Blinker的噩梦(扫描线+熟练剖分+树状数组)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2758 题意:平面上有n个多边形(凸包和圆).任意两个多边形AB只有两种关系:(1) ...
- [bzoj4009] [HNOI2015]接水果 整体二分+扫描线+dfs序+树状数组
Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更 加 ...
- 洛谷 P1908 逆序对(树状数组解法)
归并排序解法:https://www.cnblogs.com/lipeiyi520/p/10356882.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...
- (好题)树状数组+离散化+DFS序+离线/莫队 HDOJ 4358 Boring counting
题目传送门 题意:给你一棵树,树上的每个节点都有树值,给m个查询,问以每个点u为根的子树下有多少种权值恰好出现k次. 分析:首先要对权值离散化,然后要将树形转换为线形,配上图:.然后按照右端点从小到大 ...
- 【42%】【hdu1166】排兵布阵(树状数组解法&&线段树解法)
Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...
- C#LeetCode刷题-树状数组
树状数组篇 # 题名 刷题 通过率 难度 218 天际线问题 32.7% 困难 307 区域和检索 - 数组可修改 42.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 ...
- 洛谷 P5057 [CQOI2006]简单题 (树状数组,位运算)
题意:有一个长度为\(n\)的数组,进行\(m\)次操作,每次读入一个值\(t\),如果\(t=1\),则将区间\([l,r]\)的数字反转,若\(t=2\),则查询下标为\(i\)的值. 题解:树状 ...
- uva 12356 Army Buddies 树状数组解法 树状数组求加和恰为k的最小项号 难度:1
Nlogonia is fighting a ruthless war against the neighboring country of Cubiconia. The Chief General ...
随机推荐
- 面向对象【day07】:类的特性介绍(四)
本节内容 1.概述 2.访问属性 3.私有属性 4.总结 一.概述 在上篇博客中我们已经讲了一些关于类的知识,我们来回顾以下: 定义类(class dog(object))-> 实例化(d = ...
- 四种常见的 POST 提交数据方式(application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml)
四种常见的 POST 提交数据方式(application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml) 转 ...
- Python学习笔记9-多线程和多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- Pool多进程示例
利用Pool类多进程实现批量主机管理 #!/usr/bin/python # -*- coding: UTF-8 -*- # Author: standby # Time: 2017-03-02 # ...
- .NET面试题系列(十四)锁
锁 分布式锁 如何解决分布式锁超时问题 我们可以让获得锁的线程开启一个守护线程,用来给快要过期的锁“续航” 当过去了29秒,线程A还没执行完,这时候守护线程会执行expire指令,为这把锁“续命”20 ...
- 一、GPIO操作
1.1 硬件原理图 四个引脚接到LED上,跟别是GPF4,GPF5,GPF6和GPF7,前三个引脚分别控制三个LED,GPF7此引脚作为DM9000网卡的中断. 发光二极管的正极接3.3V电源,负极接 ...
- python的安装和pycharm的安装
下载地址 官网:https://www.python.org/downloads/release/python-372/ Window 平台安装 Python: Add python xx to ...
- pythonic语法
b="$".join(str(x) for x in range(10)) a= 2 if 5<2 else 3 print (a)#a是3
- [转]C++11的enum class & enum struct和enum
1. 旧版enum存在的问题 问题 描述 1 向整形的隐式转换(Implicit conversion to an integer) 2 无法指定底层所使用的数据类型(Inability to spe ...
- 一步一步详解ID3和C4.5的C++实现
1. 关于ID3和C4.5的原理介绍这里不赘述,网上到处都是,可以下载讲义c9641_c001.pdf或者参考李航的<统计学习方法>. 2. 数据与数据处理 本文采用下面的训练数据: 数据 ...