Luogu 4155 [SCOI2015]国旗计划
BZOJ 4444
倍增 + 贪心。
发现是一个环,先按照套路把环断开复制一倍,这样子的话覆盖完整个环就相当于覆盖一条长度不小于$m$的链,注意这样子有一些区间在新的这条链上会出现两次。
我们为了找到最小的满足要求的答案,在选择完一个区间$[l, r]$之后会选择左端点不超过$r$但是右端点尽量大的区间,因为题目保证了所有的区间不相互包含,这样子的话我们只要找到左端点最靠右的区间就可以了。
用$f_{i, j}$表示$i$号区间向下跳$2^j$个区间能跳到的最后一个区间,接下来只要按照套路倍增一下就好了。
注意弄一个最大的右端点(要足够大,我就是这样WA了两次……),使倍增的时候能停下来。
时间复杂度$O(nlogn)$。
实现的时候需要注意细节。
#include <cstdio>
#include <cstring>
#include <climits>
#include <algorithm>
using namespace std;
typedef long long ll; const int N = 4e5 + ;
const int Lg = ;
const int inf = INT_MAX; int n, m, tot = , ans[N], f[N][Lg]; struct Seg {
int l, r, id; friend bool operator < (const Seg &x, const Seg &y) {
if(x.l != y.l) return x.l < y.l;
else return x.r < y.r;
} } a[N]; template <typename T>
inline void read(T &X) {
X = ; char ch = ; T op = ;
for(; ch > '' || ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} inline int solve(int x) {
int res = , pos = x;
for(int i = ; i >= ; i--)
if(f[pos][i] && a[f[pos][i]].r < a[x].l + m)
pos = f[pos][i], res += ( << i);
return res;
} int main() {
// freopen("3.in", "r", stdin);
// freopen("my.out", "w", stdout); read(n), read(m);
for(int l, r, i = ; i <= n; i++) {
read(l), read(r);
if(l > r) {
r += m;
a[++tot].l = l, a[tot].r = r, a[tot].id = i;
} else {
a[++tot].l = l, a[tot].r = r, a[tot].id = i;
a[++tot].l = l + m, a[tot].r = r + m, a[tot].id = i;
}
} sort(a + , a + + tot);
a[tot + ].r = inf; for(int j = , i = ; i <= tot; i++) {
for(; j <= tot && a[j + ].l <= a[i].r; ++j);
f[i][] = j;
}
for(int j = ; j <= ; j++)
for(int i = ; i <= tot; i++)
f[i][j] = f[f[i][j - ]][j - ]; for(int i = ; i <= tot; i++) {
if(a[i].l > m) continue;
ans[a[i].id] = solve(i);
} for(int i = ; i <= n; i++)
printf("%d%c", ans[i], i == n ? '\n' : ' ');
// printf("\n"); return ;
}
Luogu 4155 [SCOI2015]国旗计划的更多相关文章
- [luogu] P4155 [SCOI2015]国旗计划(贪心)
P4155 [SCOI2015]国旗计划 题目描述 A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此 ...
- [倍增]luogu P4155 [SCOI2015]国旗计划
题面 https://www.luogu.com.cn/problem/P4155 问在环上最少取多少个区间能完全覆盖环 分析 首先发现是环,先把端点变为2n方便处理,注意离散化 其次要删去贡献不如其 ...
- [BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增)
[BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增) 题面 题面较长,略 分析 首先套路的断环为链.对于从l到r的环上区间,若l<=r,我们 ...
- [SCOI2015]国旗计划[Wf2014]Surveillance
[SCOI2015]国旗计划 A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名 ...
- 【BZOJ4444】[Scoi2015]国旗计划 双指针+倍增
[BZOJ4444][Scoi2015]国旗计划 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形 ...
- 4444: [Scoi2015]国旗计划
4444: [Scoi2015]国旗计划 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 485 Solved: 232 Description A国 ...
- bzoj 4444: [Scoi2015]国旗计划
Description A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的 ...
- [SCOI2015]国旗计划
Description: A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 \ ...
- 【bzoj4444】[Scoi2015]国旗计划 倍增
题目描述 给出一个圈和若干段,问:对于所有的 $i$ ,选择第 $i$ 段的情况下,最少需要选择多少段(包括第 $i$ 段)能够覆盖整个圈? 输入 第1行,包含2个正整数N,M,分别表示边防战士数量和 ...
随机推荐
- 【转载】对一致性Hash算法,Java代码实现的深入研究
原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...
- 解决安装Weblogic domain卡住问题(Primeton BPS)
这两天一直有一个问题困扰我,在suse10+weblogic(920,923,100,103)上安装bpm产品失败.有些版本是创建domain的时候卡在create security informat ...
- IE9以上版本无法更換会员头像
解决方法一:把网址加入"信任的網站" 就可以了 解决方法二:打开IE8的窗口-工具-- Intelnet选项-- 安全-- 自定义级别把“将文件上传到服务器时包含本地目录路径”这一 ...
- 双击 cui
//改变属性块的双击事件 //将菜单文件中的双击改一下,退出时还原文件 acad.bak.cui 改这个名字 每次用这个更新为新的 acad.cui进行修改 //退出时再用 acad.bak.cui还 ...
- java图形用户界面边界布局管理器
总结:不同方向的组件,所用的板是不同的: package com.moc; //用布局写一个界面 ///运用边界布局 //2个按钮在北,2个按钮在南 //中央一个大按钮 //将同一方向的组件封装后布局 ...
- Vue.js:样式绑定
ylbtech-Vue.js:样式绑定 1.返回顶部 1. Vue.js 样式绑定 Vue.js class class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v- ...
- PL/SQL 训练03 --异常
--程序员在开发的时候,经常天真的认为这个世界是完美的,用户如同自己般聪明,总能按照自己设想的方式--操作系统输入数据.但残酷的事实告诉我们,这是不可能的事情,用户总会跟我们相反的方式操作系统--于是 ...
- BIOS设置fn
在BIOS中可以设置fn开启或者关闭,但可能有某些电脑设置了也无效,可能需要更新BIOS驱动等等.
- Linq语句:三表联查
var db = new DataEntities2(); var sss = ( from c in db.AIRPORT_HELIPORT ...
- 第九章 整合Mybatis(待续)
··········