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\) 国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 ...
随机推荐
- OO 第三单元总结
1. JML梳理 根据JML LEVEL 0手册梳理常用条目 1.1 JML 理论基础 \result表达式 : 表示方法返回值 \old( expr )表达式:表示方法执行之前expr表达式取值,若 ...
- parameter与attribute的使用场合(转载自草原和大树)
Attribute 和 Parameter 的区别 (1)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法 (2)当两个Web组件之间为 ...
- Linux常用操作2
第1章 find命令扩展 转自:https://www.cnblogs.com/clsn/p/7520333.html 1.1 方法一 |xargs 通过|xargs将前面命令的执行结果传给后面. [ ...
- ArrayList与Vector区别
ArrayList与Vector区别表 ArrayList Vector 1.实现原理:采用动态对象数组实现,默认构造方法创建了一个空数组 1.实现原理:采用动态数组对象实现,默认构造方法创建了一个大 ...
- Centos_linux系统的区别及实际查看
在Linux系统查看系统版本为 32 位还是 64 位 [root@localhost ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [ ...
- C# 发Domino邮件 报错误 Password or other security violation for database 的解决方案
错误提示: Password or other security violation for database ******* 问题产生的描述: 之前C#发邮件是好的 加上了附件部分代码之后,出现了这 ...
- tomcat jvm参数优化
根据gc(垃圾回收器)的选择,进行参数优化 JVM给了三种选择:串行收集器.并行收集器.并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器. -XX:+Us ...
- SQL Server 删除当前数据库中所有数据库 ,无视约束
Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: exec sp_msforeachtable @Command1 ='truncate table ?' 删除所有数据表: e ...
- [转载]AngularJS入门教程00:引导程序
我们现在开始准备编写AngularJS应用——phonecat.这一步骤(步骤0),您将会熟悉重要的源代码文件,学习启动包含AngularJS种子项目的开发环境,并在浏览器端运行应用. 进入angul ...
- POJ 3233 Matrix Power Series (矩阵分块,递推)
矩阵乘法是可以分块的,而且幂的和也是具有线性的. 不难得到 Si = Si-1+A*Ai-1,Ai = A*Ai-1.然后矩阵快速幂就可以了. /*************************** ...