4444: [Scoi2015]国旗计划
4444: [Scoi2015]国旗计划
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 485 Solved: 232
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
分析
每一个区间都不能被其他区间所包含,也就是如果li<lj那么一定满足ri<rj,然后就可以贪心一下。
对于区间[l,r],可以在区间找到一个li,使得这个li的右端点ri最大,然后继续寻找。
这样可以按照左端点排序,然后每一个战士要找的下一个战士都是确定的。这样预处理出来。
求解有多少战士的话,可以用倍增,f[i][j]表示从i点走2j步到达的点,如果f[i][j]所到达的点没有超出m,就可以从i点走2j步,到达下一个点。 继续寻找。
code
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set> using namespace std; const int MAXN = ;
const int INF = 0x7fffffff; struct Peo{
int l,r,id;
bool operator < (const Peo &a) const
{
return l < a.l;
}
}p[MAXN]; int f[MAXN][],ans[MAXN];//f[i][j]表示从i点走2^j步到达的点
int tot,n,m;
set< pair<int,int> >s; int read()
{
int x = ,f = ;char ch = getchar();
while (ch<''||ch>'') {if (ch=='-') f=-;ch = getchar(); }
while (ch>=''&&ch<=''){x = x*+ch-'';ch = getchar(); }
return x*f;
} void work(int x)
{
int d = p[x].id, L = p[x].l+m;
for (int i=; i>=; --i)
if (f[x][i])
if (p[f[x][i]].r<L)
x = f[x][i],ans[d] += (<<i);
} int main()
{
n = read(),m = read();
for (int x,y,i=; i<=n; ++i)
{
x = read();y = read();
if (y<x) y += m;
p[++tot].l = x; p[tot].r = y; p[tot].id = i;
p[++tot].l = x+m;p[tot].r = y+m;
} sort(p+,p+tot+);
s.insert(make_pair(p[tot].l,tot));
for (int i=tot-; i; --i)
{
f[i][] = (--s.upper_bound(make_pair(p[i].r,INF)))->second;
s.insert(make_pair(p[i].l,i));
} for (int i=; i<=; ++i)
for (int j=tot; j; --j)
f[j][i] = f[f[j][i-]][i-];
for (int i=; i<=tot; ++i)
if (p[i].id) work(i); for (int i=; i<=n; ++i)
printf("%d ",ans[i]+);
return ;
}
4444: [Scoi2015]国旗计划的更多相关文章
- bzoj 4444: [Scoi2015]国旗计划
Description A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的 ...
- 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,分别表示边防战士数量和 ...
- [bzoj4444] [loj#2007] [洛谷P4155] [Scoi2015] 国旗计划
Description \(A\) 国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 ...
随机推荐
- i++ ++i i=i+1 和i+=1
这几个运算符的差别总是过一段时间就爱搞混,每次需要百度,还是自己记录一下方便查阅. int i=0; System.out.println(i++); 输出:0 int i=0; System.out ...
- JQuery初识(二)
一丶链式编程 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- ECMAScript 原始值和引用值
原始值和引用值 在ECMAScript中,变量可以存在两种类型的值,即原始值和引用值 原始值 存储
- 转:WPF中ListBox的创建和多种绑定用法
先从最容易的开始演示ListBox控件的创建. Adding ListBox Items下面的代码是向ListBox控件中添加多项ListBoxItem集合.XAML代码如下:<ListBox ...
- 安装windows phone 7
本机环境win7 32位旗舰版,本来是4G内存的 系统只能读出2.9G,vs2010中文旗舰版,想搭建windows phone环境学习wp手机开发.安装完了之后明显感觉机器慢了些. ①:安装Mic ...
- IT技能等级
IT技能 低:会使用,会简单维修(操作) 中:能跟据实际业务需求扩展(技改.完善) 中高:找产品,能组合,能设计创造(出方案) 高:能规划(规划)
- pysnmp使用
install yum install python-pysnmp yum install python-pyasn1 or pip install pysnmp pip install pyasn1 ...
- 基于mllib的协同过滤实战(电影推荐)
//加载需要的包 import org.apache.spark.rdd._ import org.apache.spark.mllib.recommendation.{ALS, Rating, Ma ...
- 一个普通 iOS 码农的几个小项目相关知识点总结
题记:在开发的路途上,有的人走的很深很远,而对于停留在初级阶段的我来说,还要学的.经历的还有很多... list sqlite 数据库中,当把表里的数据都清空时,下次插入的数据的 id 主键不会从 0 ...
- .net reflector 的缺陷
.net reflector是一个反编译DLL的工具,在安装后如果电脑上有VS也会同时安装到VS里面,但是他是收费的,虽然反编译的效果很好,但是运行VS2013时(或许其他版本也有这样的问题)如果项目 ...