bzoj 4444: [Scoi2015]国旗计划
Description
Input
Output
Sample Input
2 5
4 7
6 1
7 3
Sample Output
HINT
n≤2×10^5,M< 10^9,1≤Ci,Di≤M
Source
这种环的题目考虑断环为链然后倍长来处理;
然后我们发现每个人肯定要跑得越远越好,因为这样覆盖的区间最大,而且他所覆盖的其他人都可以帮他接力,所以不可能差;
那么从每个点选择的接力的人只有一个,就是他覆盖的路径中能跑得最远的那个人,这个用线段树查询一下区间最大值;
既然每个人都只有一个父亲,那么实际上移动构成了一种树的关系,然后我们要快速的处理移动的询问,我门采用倍增来加速移动即可;
注意需要离散化,以及环倍长后的另外一边要做同样的倍增处理;
//MADE BY QT666
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define lson x<<1
#define rson x<<1|1
using namespace std;
typedef long long ll;
const int N=500050;
int fa[N*2][18],n,m,c[N*2],d[N*2],tr[N*8];
int hsh[N*2],tot;
void build(int x,int l,int r){
if(l==r) {tr[x]=fa[l][0];return;}
int mid=(l+r)>>1;
build(lson,l,mid);build(rson,mid+1,r);
tr[x]=max(tr[lson],tr[rson]);
}
int query(int x,int l,int r,int xl,int xr){
if(xl>xr) return 0;
if(xl<=l&&r<=xr) return tr[x];
int mid=(l+r)>>1;
if(xr<=mid) return query(lson,l,mid,xl,xr);
else if(xl>mid) return query(rson,mid+1,r,xl,xr);
else return max(query(lson,l,mid,xl,mid),query(rson,mid+1,r,mid+1,xr));
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int x,y;scanf("%d%d",&x,&y);
hsh[++tot]=x,hsh[++tot]=y,hsh[++tot]=m+y,hsh[++tot]=x+m;
c[i]=x;if(x<y) d[i]=y;else d[i]=m+y;
}
sort(hsh+1,hsh+1+tot);tot=unique(hsh+1,hsh+1+tot)-hsh-1;
for(int i=1;i<=tot;i++){
if(hsh[i]==0) cout<<i<<endl;
}
for(int i=1;i<=n;i++){
if(d[i]<=m){
c[i]=lower_bound(hsh+1,hsh+1+tot,c[i])-hsh;
d[i]=lower_bound(hsh+1,hsh+1+tot,d[i])-hsh;
fa[c[i]][0]=d[i];
int cc=lower_bound(hsh+1,hsh+1+tot,hsh[c[i]]+m)-hsh;
int dd=lower_bound(hsh+1,hsh+1+tot,hsh[d[i]]+m)-hsh;
fa[cc][0]=dd;
}
else{
c[i]=lower_bound(hsh+1,hsh+1+tot,c[i])-hsh;
d[i]=lower_bound(hsh+1,hsh+1+tot,d[i])-hsh;
fa[c[i]][0]=d[i];
int cc=lower_bound(hsh+1,hsh+1+tot,hsh[c[i]]+m)-hsh;
fa[cc][0]=tot;
}
}
for(int i=1;i<=tot;i++) if(hsh[i]==0) cout<<i<<endl;
build(1,1,tot);
for(int i=1;i<=n;i++){
fa[d[i]][0]=query(1,1,tot,c[i]+1,d[i]);
if(hsh[d[i]]<=m){
int cc=lower_bound(hsh+1,hsh+1+tot,hsh[c[i]]+m)-hsh;
int dd=lower_bound(hsh+1,hsh+1+tot,hsh[d[i]]+m)-hsh;
fa[dd][0]=query(1,1,tot,cc+1,dd);
}
}
for(int j=1;j<=17;j++){
for(int i=1;i<=tot;i++){
fa[i][j]=fa[fa[i][j-1]][j-1];
}
}
for(int i=1;i<=n;i++){
int ret=0,x=c[i];
for(int j=17;j>=0;j--){
if(hsh[fa[x][j]]<hsh[c[i]]+m&&fa[x][j]){
ret+=(1<<j),x=fa[x][j];
}
}
ret++;
printf("%d ",ret);
}
return 0;
}
bzoj 4444: [Scoi2015]国旗计划的更多相关文章
- 4444: [Scoi2015]国旗计划
4444: [Scoi2015]国旗计划 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 485 Solved: 232 Description A国 ...
- 4444: [Scoi2015]国旗计划|贪心|倍增
由于没有区间被其它区间包括这个条件,也就是假设li<lj那么一定满足ri<rj,就能够贪心搞一搞了. 假如区间[l,r]都已经被覆盖,那么能够继续找一个li在[l,r]范围内的最大的一个, ...
- [SCOI2015]国旗计划[Wf2014]Surveillance
[SCOI2015]国旗计划 A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名 ...
- 【BZOJ4444】[Scoi2015]国旗计划 双指针+倍增
[BZOJ4444][Scoi2015]国旗计划 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形 ...
- [luogu] P4155 [SCOI2015]国旗计划(贪心)
P4155 [SCOI2015]国旗计划 题目描述 A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此 ...
- [BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增)
[BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增) 题面 题面较长,略 分析 首先套路的断环为链.对于从l到r的环上区间,若l<=r,我们 ...
- [SCOI2015]国旗计划
Description: A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 \ ...
- 【bzoj4444】[Scoi2015]国旗计划 倍增
题目描述 给出一个圈和若干段,问:对于所有的 $i$ ,选择第 $i$ 段的情况下,最少需要选择多少段(包括第 $i$ 段)能够覆盖整个圈? 输入 第1行,包含2个正整数N,M,分别表示边防战士数量和 ...
- Luogu 4155 [SCOI2015]国旗计划
BZOJ 4444 倍增 + 贪心. 发现是一个环,先按照套路把环断开复制一倍,这样子的话覆盖完整个环就相当于覆盖一条长度不小于$m$的链,注意这样子有一些区间在新的这条链上会出现两次. 我们为了找到 ...
随机推荐
- C#学习笔记——数据库篇(1)
C#的数据连接分同样分三步走 .连接语句 string str_conn = "sever = localhost;database = smaple;usid = sa;pwd = 123 ...
- apache mysql无法启动解决办法
最近在调试几个代码,需要不停的启动关闭服务器和mysql.在连续的几次开关后,无法启动了,每次启动后就直接关闭. 刚开始是怀疑是不是端口被占用了,查看端口后,并没有端口被占用的情况.查看mysql错误 ...
- JavaScript正则表达式(Regular Expression):RegExp对象
第一部分:新建正则表达式 JavaScript中正则表达式是参照Perl 5(一门历史很悠久的语言,现在tiobe编程语言排行依然在10名左右)建立的. 新建正则表达式的方法有两种: 1.使用字面量( ...
- CentOS环境下Docker私有仓库搭建
本文讲述如何搭建docker私有仓库. 有了docker hub,为什么还要搭建docker私有仓库? 1.性能考虑:docker hub的访问要通过互联网,性能太低. 2.安全性:更多的时候,镜像不 ...
- Python中的列表生成器,迭代器的理解
首先,思考一个问题,比如,我们想生成0-100的列表,我们怎么做? 当然,可以写成 list1=[1,2,3...,100] 可以看出,这种方法不适合生成长的列表,那么Python中就可以利用已有的列 ...
- 蓝桥杯 密码脱落 LCS
9. 密码脱落(后来题目说是有问题,测试用例不会有E出现) X星球的考古学家发现了一批古代留下来的密码. 这些密码是由A.B.C.D 四种植物的种子串成的序列. 仔细分析发现,这些密码串当初应该是前后 ...
- Java调用PDFBox打印自定义纸张PDF
打印对象 一份设置为A3纸张, 页面边距为(10, 10, 10, 10)mm的PDF文件. PageFormat 默认PDFPrintable无法设置页面大小. PDFPrintable print ...
- mac mono Fiddler.exe启动失败
mono version 5.4 fiddler version 4.6 启动fiddler:mono Fiddler.exe 启动报错 WARNING: The Carbon driver has ...
- FSharp 调用 Oracle.ManagedDataAccess.dll
FSharp 调用 Oracle.ManagedDataAccess.dll 1.Oracle.ManagedDataAccess.dll 的下载地址.好像如今必需要注冊才干下载. 即使是 64 位系 ...
- cocos2d+TexturePackerGUI动画制作
转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25168047 程序效果图: 1.下载安装TexturePackerGUI 地址:htt ...