loj #2007. 「SCOI2015」国旗计划
#2007. 「SCOI2015」国旗计划
题目描述
A 国正在开展一项伟大的计划 —— 国旗计划。这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈。这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 N NN 名优秀的边防战上作为这项计划的候选人。
A 国幅员辽阔,边境线上设有 M MM 个边防站,顺时针编号 1 11 至 M MM。每名边防战士常驻两个边防站,并且善于在这两个边防站之间长途奔袭,我们称这两个边防站之间的路程是这个边防战士的奔袭区间。N NN 名边防战士都是精心挑选的,身体素质极佳,所以每名边防战士的奔袭区间都不会被其他边防战士的奔袭区间所包含。
现在,国十安全局局长希望知道,至少需要多少名边防战士,才能使得他们的奔袭区间覆盖全部的边境线,从而顺利地完成国旗计划。不仅如此,安全局局长还希望知道更详细的信息:对于每一名边防战士,在他必须参加国旗计划的前提下,至少需要多少名边防战士才能覆盖全部边境线,从而顺利地完成国旗计划。
输入格式
第一行,包含两个正整数 N,M N, MN,M,分别表示边防战士数量和边防站数量。
随后 n nn 行,每行包含两个正整数。其中第 i ii 行包含的两个正整数 Ci C_iCi、Di D_iDi 分别表示 i ii 号边防战士常驻的两个边防站编号,Ci C_iCi 号边防站沿顺时针方向至 Di D_iDi 号边防站力他的奔袭区间。数据保证整个边境线都是可被覆盖的。
输出格式
输出数据仅 1 11 行,需要包含 n nn 个正整数。其中,第 j jj 个正整数表示 j jj 号边防战士必须参加的前提下至少需要多少名边防战士才能顺利地完成国旗计划。
样例
样例输入
4 8
2 5
4 7
6 1
7 3
样例输出
3 3 4 3
数据范围与提示
N≤2×105,M<109,1≤Ci,Di≤M N \leq 2 \times 10 ^ 5, M < 10 ^ 9, 1 \leq C_i, D_i \leq MN≤2×105,M<109,1≤Ci,Di≤M
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 400010
using namespace std;
int head[maxn],dep[maxn],s[maxn],ans[maxn];
int n,m,num,t;
struct node{int to,pre;}e[maxn*];
struct Node{
int l,r,id;
bool operator < (const Node &x)const{
return l<x.l;
}
}q[maxn];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
void dfs(int now,int father,int h){
dep[now]=dep[father]+;
s[++t]=now;
if(q[now].id!=){
while(h<t&&q[s[h+]].r>=q[now].l+m)h++;
ans[q[now].id]=dep[now]-dep[s[h]]+;
}
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
dfs(to,now,h);
}
t--;
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int l,r;
scanf("%d%d",&l,&r);
if(l>r)r+=m;
q[i].l=l;q[i].r=r;q[i].id=i;
q[i+n].l=l+m;q[i+n].r=r+m;
}
int now=;
sort(q+,q+*n+);
for(int i=;i<*n;i++){
while(now<*n&&q[i].r>=q[now+].l)now++;
Insert(now,i);
}
dfs(*n,,);
for(int i=;i<=n;i++)
printf("%d ",ans[i]);
return ;
}
自上向下
loj #2007. 「SCOI2015」国旗计划的更多相关文章
- 【LOJ】#2007. 「SCOI2015」国旗计划
题解 考虑朴素的做法,断环为链,复制2M个,找到一个位置i,f(i)是这个位置之前开始的线段,结束位置最远的位置在哪 然后对于每一个人,从自己线段的起点往下跳,跳到起点+M或以后的步数就是答案 我们发 ...
- #2007. 「SCOI2015」国旗计划
好久没更过博了.. 首先断环为链,因为线段互相不包含,所以对每个线段\(i\)可以找一个满足\(r_j\geq l_i\)的\(l_j\)最小的线段,dp的时候\(i\)就会从\(j\)转移过来 然后 ...
- AC日记——「SCOI2015」国旗计划 LiBreOJ 2007
#2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define ma ...
- 「SCOI2015」国旗计划 解题报告
「SCOI2015」国旗计划 蛮有趣的一个题 注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下 然后往后面跳拿 ...
- loj#2009.「SCOI2015」小凸玩密室
题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...
- loj #2008. 「SCOI2015」小凸想跑步
#2008. 「SCOI2015」小凸想跑步 题目描述 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 n nn 边形,N NN 个顶点按照逆时针从 0∼n−1 0 ...
- loj #2006. 「SCOI2015」小凸玩矩阵
#2006. 「SCOI2015」小凸玩矩阵 题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 ...
- loj#2552. 「CTSC2018」假面
题目链接 loj#2552. 「CTSC2018」假面 题解 本题严谨的证明了我菜的本质 对于砍人的操作好做找龙哥就好了,blood很少,每次暴力维护一下 对于操作1 设\(a_i\)为第i个人存活的 ...
- LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配
#2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
随机推荐
- Oracle 存储过程学习笔记
1.存储过程简单实例 CREATE OR REPLACE PROCEDURE 存储过程名称 (参数in,参数out) AS -- 变量声明,每个声明用分号结束.可以在声明的同时初始化 name ); ...
- appium python版api
打印上下文 driver.contexts 打印当前上下文 driver.context driver.current_context 切换上下文 driver.switch_to.context(' ...
- EM算法以及推导
EM算法 Jensen不等式 其实Jensen不等式正是我们熟知的convex函数和concave函数性质,对于convex函数,有 \[ \lambda f(x) + (1-\lambda)f(y) ...
- Android 4学习(7):用户界面 - 基础
参考<Professional Android 4 Development> Android UI基本元素 下面这些概念是Android UI设计的基础,深入学习和理解它们是Android ...
- DDD学习笔录——领域驱动设计的常见误区(即错误的理解)
可以将DDD看成一种开发思想体系:它促成了一种新的以领域为中心的思维方式. 它是一种学习过程,而非最终目标,这就是DDD的最大优势. 任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力 ...
- XE Button Color
XE Button Color,FMX Button 颜色 也可以放个rectangle+Glyph控件. http://blogs.embarcadero.com/sarinadupont/2014 ...
- C语言学习笔记--动态内存分配
1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确 ...
- Ubuntu安装Chrome及hosts修改
Ubuntu16.04 1.chrome安装 获取安装包http://www.google.cn/chrome/browser/desktop/index.html 在安装包目录打开终端执行sudo ...
- OpenCV4Android 不需要安装OpenCVManager,就可以运行的方法
http://blog.csdn.net/yanzi1225627/article/details/27863615 OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种 ...
- Ros学习调试——rqt_console
1.rqt_console rqt_console:ROS日志框架(logging framework)的一部分,用来显示节点的输出信息 rqt_logger_level:允许我们修改节点运行时输出信 ...