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\) 国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 ...
随机推荐
- hibernate课程 初探单表映射3-1 单一主键
本节简介: 1 单一主键的两种赋值方式:手动赋值(assigned)和自动赋值(native) 2 mysql和oracle赋值的不同形式 3 demo 2 native由底层数据库生成标识符,如果是 ...
- 用简单的方法学习ES6
ES6 简要概览 这里是ES6 简要概览.本文大量参考了ES6特性代码仓库,请允许我感谢其作者@Luke Hoban的卓越贡献,也感谢@Axel Rauschmayer所作的[优秀书籍]//explo ...
- [荐]推荐一个shell学习的网站
最近再用shell脚本,发现一个脚本学习的网站,非常好用,特此推荐一下. shell学习网站链接:http://c.biancheng.net/cpp/shell/
- 【extjs6学习笔记】1.10 初始: 定义类
http://www.extjs-tutorial.com/extjs/define-new-class-in-extjs
- JS修改地址栏参数实例代码
function changeURLPar(destiny, par, par_value) { var pattern = par+'=([^&]*)'; var replaceText = ...
- Command Line Client(建库,建表)
Enter password: ******Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection ...
- java核心技术 要点笔记1
第1章 1.java特性 简单性,java语法是一个C++语法的纯净版本. 面向对象,java将重点放在数据和对象的接口上.java与C++的主要不同点在于多继承,在java中实现多继承的机制是采用接 ...
- [动态规划] uestc oj A - 男神的礼物
A - 男神的礼物 Time Limit: 3000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Lweb学长 ...
- python_输出100:200内的素数
sushu=[] for i in range(100,201): for j in range(2,i): if i%j==0: break if i==j+1: sushu.append(i) p ...
- sqlldr将txt导入oracle数据库
注意事项: 1.userid 和 control关键字不要缺少: 2.注意数据库格式:test/test@数据库IP:1521/Oracle8,最后一个是tnsnames中的service_name, ...