题目描述

A 国正在开展一项伟大的计划 —— 国旗计划。这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈。这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 NN 名优秀的边防战上作为这项计划的候选人。

A 国幅员辽阔,边境线上设有 MM 个边防站,顺时针编号 11 至 MM 。每名边防战士常驻两个边防站,并且善于在这两个边防站之间长途奔袭,我们称这两个边防站之间的路程是这个边防战士的奔袭区间。NN 名边防战士都是精心挑选的,身体素质极佳,所以每名边防战士的奔袭区间都不会被其他边防战士的奔袭区间所包含。

现在,国十安全局局长希望知道,至少需要多少名边防战士,才能使得他们的奔袭区间覆盖全部的边境线,从而顺利地完成国旗计划。不仅如此,安全局局长还希望知道更详细的信息:对于每一名边防战士,在他必须参加国旗计划的前提下,至少需要多少名边防战士才能覆盖全部边境线,从而顺利地完成国旗计划。

输入输出格式

输入格式:

第一行,包含两个正整数 N,MN,M ,分别表示边防战士数量和边防站数量。

随后 NN 行,每行包含两个正整数。其中第 ii 行包含的两个正整数 C_iCi​ 、D_iDi​ 分别表示 ii 号边防战士常驻的两个边防站编号,C_iCi​ 号边防站沿顺时针方向至 D_iDi​ 号边防站力他的奔袭区间。数据保证整个边境线都是可被覆盖的。

输出格式:

输出数据仅 11 行,需要包含 NN 个正整数。其中,第 jj 个正整数表示 jj 号边防战士必须参加的前提下至少需要多少名边防战士才能顺利地完成国旗计划。

说明

N\leqslant 2×10^5,M<10^9,1\leqslant C_i,D_i\leqslant MN⩽2×105,M<109,1⩽Ci​,Di​⩽M 。

题意:一个m个点的环,给出n个环上的区间(可能跨越1),求出所有 必须使用区间i而将所有的m都覆盖的最小区间数 ansi;

题解:
①如果不是环,不是多个询问就是一个贪心

②是环的话断环为链,倍长,把跨越1的拆成三分,其他的拆成两份;同样维护j位置及其左边右端点的最大值(有点绕),每次尽量往前跳; 对于ansi相当于规定了贪心的起点为i的左端点;

③实现具体可以倍增做,但是%%%Claris,对于一个坐标只会有一个最大值,意思就是所有的最大值形成一个以末尾为根的树结构,从后往前dfs遍历,用一个栈存下当前路径上的元素,预先处理没有必选区间的区间覆盖最小值L,所有的ansi和L相差不会超过1,每次向上查L,L+1个元素是否覆盖满记录答案;

 #include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=;
int n,m,id[N],ans[N],L=-,tot,q[N<<],t,hd[N<<],nt[N<<],sub[N],x[N>>],y[N>>],f[N<<];
char gc(){
static char *p1,*p2,s[];
if(p1==p2) p2=(p1=s)+fread(s,,,stdin);
return (p1==p2)?EOF:*p1++;
}
int rd(){
int x=; char c=gc();
while(c<''||c>'') c=gc();
while(c>=''&&c<='') x=(x<<)+(x<<)+c-'',c=gc();
return x;
}
void up(int&x,int y){if(x<y) x=y;}
void dfs(int u){
q[++t]=u;
if(u<=tot) for(int i=L;;i++)if(q[t-i]>=u+tot){ans[u]=i;break;}
for(int i=hd[u];i;i=nt[i]) dfs(i); t--;
}
int main()
{ freopen("bzoj4444.in","r",stdin);
freopen("bzoj4444.out","w",stdout);
n=rd(); m=rd(); sub[++tot] = ; sub[++tot] = m;
for(int i=;i<=n;i++) sub[++tot]=x[i]=rd(),sub[++tot]=y[i]=rd();
sort(sub+,sub+tot+); tot = unique(sub+,sub+tot+) - sub - ;
for(int i=;i<=n;i++){
id[i] = x[i] = lower_bound(sub+,sub+tot+,x[i]) - sub;
y[i] = lower_bound(sub+,sub+tot+,y[i]) - sub;
if(x[i]<=y[i]) up(f[x[i]],y[i]),up(f[x[i]+tot],y[i]+tot);
else up(f[],y[i]),up(f[x[i]],y[i]+tot),up(f[x[i]+tot],*tot);
}
for(int i=;i<=*tot;i++) up(f[i],f[i-]);
for(int i=;i<=tot;i=f[i])L++;
for(int i=;i<*tot;i++) nt[i]=hd[f[i]],hd[f[i]]=i;
dfs(*tot);
for(int i=;i<=n;i++) printf("%d ",ans[id[i]]);
return ;
}//by tkys_Austin;

【bzoj4444 scoi2015】国旗计划的更多相关文章

  1. [BZOJ4444][SCOI2015]国旗计划(倍增)

    链上是经典贪心问题,将线段全按左端点排序后把点全撒在线段右端点上.这里放到环上,倍长即可. 题目保证不存在区间包含情况,于是有一种暴力做法,先将战士的管辖区间按左端点从小到大排序,对于询问x,从x战士 ...

  2. BZOJ4444 SCOI2015国旗计划(贪心+倍增)

    链上问题是一个经典的贪心.于是考虑破环成链,将链倍长.求出每个线段右边能作为后继的最远线段,然后倍增即可. #include<iostream> #include<cstdio> ...

  3. BZOJ4444 : [Scoi2015]国旗计划

    首先将坐标离散化,因为区间互不包含,可以理解为对于每个起点输出最少需要多少个战士. 将环倍长,破环成链,设$f[i]$表示区间左端点不超过$i$时右端点的最大值,可以通过$O(n)$递推求出. 那么如 ...

  4. 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)

    传送门 题意简述:现在给你一个长度为mmm的环,有nnn条互不包含的线段,问如果强制选第iii条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即[1,3],[4,5][1,3],[4 ...

  5. [BZOJ4444][SCOI2015]国旗计划-[ST表]

    Description 传送门 Solution 说真的这道题在场上没做出来的我必定是脑子有洞.. 我们用st表记录以某个位置开始,派了1<<j个战士能到达的最远位置. 由于边境线是一圈, ...

  6. 【BZOJ4444】[Scoi2015]国旗计划 双指针+倍增

    [BZOJ4444][Scoi2015]国旗计划 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形 ...

  7. [BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增)

    [BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增) 题面 题面较长,略 分析 首先套路的断环为链.对于从l到r的环上区间,若l<=r,我们 ...

  8. [SCOI2015]国旗计划[Wf2014]Surveillance

    [SCOI2015]国旗计划 A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名 ...

  9. 4444: [Scoi2015]国旗计划

    4444: [Scoi2015]国旗计划 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 485  Solved: 232 Description A国 ...

  10. [luogu] P4155 [SCOI2015]国旗计划(贪心)

    P4155 [SCOI2015]国旗计划 题目描述 A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此 ...

随机推荐

  1. 数据结构——线性表——队列(queue)

    队列也是一种特殊的线性表,它的特点是先入先出(FIFO,即first in first out).它的意思也很直观,想象一下排队买票,先排的人先买(插队是不对的,所以别去想).它也是很常用的数据结构, ...

  2. 2017-2018-1 1623 bug终结者 冲刺001

    bug终结者 冲刺001 冲刺阶段任务分配 任务 工作量比例 完成时间 负责人 第一篇博客:各个成员的任务安排 1/7 12月1日 20162322 朱娅霖 第二篇博客:欢迎界面,主菜单界面 1/7 ...

  3. print 函数设置字体颜色

    格式:\033[显示方式;前景色;背景色m数值表示的参数含义:显示方式: 0(默认值).1(高亮).22(非粗体).4(下划线).24(非下划线). 5(闪烁).25(非闪烁).7(反显).27(非反 ...

  4. ### Cause: org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]

    org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: org.apache.ib ...

  5. 新概念英语(1-95)Tickets,please!

    Lesson 95 Tickets, please. 请把车票拿出来. Listen to the tape then answer this question. Why did George and ...

  6. GIT入门笔记(8)-- 查看历史提交记录/根据版本号回到过去或未来

    在Git中,用HEAD表示当前版本,也就是最新的提交版本, 上一个版本就是HEAD^, 上上一个版本就是HEAD^^, 往上100个版本写100个^比较容易数不过来,所以写成HEAD~100. Git ...

  7. 新概念英语(1-59)Is that all

    Does the lady buy any chalk? A:I want some envelopes, please. B:Do you want the large size or the sm ...

  8. spring6——AOP的编程术语

    面向切面编程作为一种编程思想,允许我们对程序的执行流程及执行结果动态的做出改变,以达到业务逻辑之间的分层管理或者是目标对象方法的增强,spring框架很好的实现了这种编程思想,让我们可以对主业务逻辑和 ...

  9. greenplum集群某台机器磁盘占用100%处理方式

    一.问题描述 使用gpfdist往集群中导入大量数据, 一段时间后连接退出,集群无法连接 二.问题定位 使用如下命令查看: gpstate -s mdw-:gpadmin-[INFO]:- Segme ...

  10. 基于 MySQL 的数据库实践(自然连接)

    在基本查询一节的示例中,我们有从 instructor 和 teaches 表组合信息,匹配条件是 instructor.ID 等于 teaches.ID 的查询,ID 属性是两个表中具有相同名称的所 ...