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 ...
随机推荐
- Post和get请求时中文乱码
在web.xml中加入: <filter> <filter-name>CharacterEncodingFilter</filter-name> <filte ...
- ansible-playbook 变量(vars)
变量优先级: ansible-playbook中定义变量: - hosts: webservers vars: http_port: 80 ①.在host里定义变量 执行结果: ②.使用var_fil ...
- on条件与where条件的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...
- UDP网路会议室的代码
UDP网络会议室视频已经录制好,这里贴上代码仅供参考 MainWindow代码: using System; using System.Collections.Generic; using Syste ...
- HttpTool.java 【暂保留】
备注 在 java tool util 工具类 中已存在 HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; ...
- JavaScript中的number跟string
遇到问题困扰很久,因为这看起来木有问题,都是对的啊,殊不知是因为参数需要一个数字类型,但是数据却悄悄变成了字符类型.在群里求救无果最后自己找到了原因. 为什么我箭头里放数字可以正常显示,放temp[i ...
- Java基础编程题——水仙花数
package com.yangzl.basic; /** * 题目:打印出所有的"水仙花数". * 所谓"水仙花数"是指一个三位数, * 其各位数字立方和等于 ...
- WinRar 压缩接压缩文件
windows WinRAR 定时压缩文件 命名当天时间 设置时间格式: set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" 指定 WinRAR ...
- Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行
1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...
- mysql 架构~mgr具体细节分析
一 简介:今天咱们来聊聊mgr的具体实现细节 二 关于多点写入的锁冲突问题以及处理: certify模块主要负责检查事务是否允许提交,是否与其它事务存在冲突,如两个事务可能修改同一行数据.在单机系 ...