题目描述

给出一个圈和若干段,问:对于所有的 $i$ ,选择第 $i$ 段的情况下,最少需要选择多少段(包括第 $i$ 段)能够覆盖整个圈?

输入

第1行,包含2个正整数N,M,分别表示边防战士数量和边防站数量。
随后n行,每行包含2个正整数。其中第i行包含的两个正整数Ci、Di分别表示i号边防战士常驻的两个边防站编号,
Ci号边防站沿顺时针方向至Di号边防站力他的奔袭区间。数据保证整个边境线都是可被覆盖的。

输出

输出数据仅1行,需要包含n个正整数。其中,第j个正整数表示j号边防战士必须参加的前提下至少需要
多少名边防战士才能顺利地完成国旗计划

样例输入

4 8
2 5
4 7
6 1
7 3

样例输出

3 3 4 3


题解

倍增

如果将选择的区间按照右端点正方向顺序考虑的话,那么如果选择了某个区间,下一个区间的选择一定是所有左端点小于等于该区间右端点中,右端点最靠后的那一个。

因此首先断环成链,然后选择区间 $[l,r]$ 后,下一个选择就应该是左端点在 $[1,r]$ 范围内,右端点最靠后的。

所以对于每一个区间 $[l,r]$ ,在 $l$ 位置上加入 $r$ ,然后求前缀最大值即可得到每个位置选上一个区间后最远能够覆盖到哪。

我们要求的是覆盖整个圈,因此可以考虑倍增算法,预处理出 $f[i][j]$ 表示从 $j$ 位置选择 $2^i$ 段区间最远能够覆盖到哪。那么上面的全椎最大值就是 $f[0][j]$ 。

根据递推式 $f[i][j]=f[i-1][f[i-1][j]]$ 预处理出 $f$ 数组,然后倍增求解。从大到小枚举 $i$ ,如果加入一段不能覆盖整个圈则加入,否则不加入。最后加上2(本身+无限逼近后剩余的一段)即为答案。

注意一下区间跨越 $m$ 的处理 ,详见代码。

时间复杂度 $O(n\log n)$

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010
#define pos(x) lower_bound(v + 1 , v + m + 1 , x) - v
using namespace std;
int a[N] , b[N] , v[N << 1] , f[20][N << 2];
int main()
{int n , m = 0 , i , j , t , ans;scanf("%d%*d" , &n);for(i = 1 ; i <= n ; i ++ ) scanf("%d%d" , &a[i] , &b[i]) , v[++m] = a[i] , v[++m] = b[i];sort(v + 1 , v + m + 1);for(i = 1 ; i <= n ; i ++ ){a[i] = pos(a[i]) , b[i] = pos(b[i]);if(a[i] < b[i]){f[0][a[i]] = max(f[0][a[i]] , b[i]);f[0][a[i] + m] = max(f[0][a[i] + m] , b[i] + m);}else{f[0][1] = max(f[0][1] , b[i]);f[0][a[i]] = max(f[0][a[i]] , b[i] + m);f[0][a[i] + m] = max(f[0][a[i] + m] , m << 1);}}for(i = 1 ; i <= m << 1 ; i ++ ) f[0][i] = max(f[0][i] , f[0][i - 1]);for(t = 1 ; (1 << t) <= m << 1 ; t ++ )for(i = 1 ; i <= m << 1 ; i ++ )f[t][i] = f[t - 1][f[t - 1][i]];for(i = 1 ; i <= n ; i ++ ){ans = 0;if(a[i] < b[i]) a[i] += m;for(j = t - 1 ; ~j ; j -- )if(f[j][b[i]] < a[i])ans += (1 << j) , b[i] = f[j][b[i]];printf("%d" , ans + 2);if(i < n) printf(" ");}return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/8029235.html

【bzoj4444】[Scoi2015]国旗计划 倍增相关推荐

  1. bzoj4444: [Scoi2015]国旗计划(线段树+倍增)

    传送门 题意简述:现在给你一个长度为 m m m的环,有 n n n条互不包含的线段,问如果强制选第 i i i条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即 [ 1 , 3 ] ...

  2. 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)

    传送门 题意简述:现在给你一个长度为mmm的环,有nnn条互不包含的线段,问如果强制选第iii条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即[1,3],[4,5][1,3],[4 ...

  3. 洛谷P2680 运输计划(倍增LCA + 树上差分 + 二分答案)

    [题目链接] [思路]: 根据题意可以明显看出,当所有任务都完成时的时间是最终的结果,也就是说本题要求,求出最小的最大值. 那这样的话就暗示了将答案二分,进行check. [check方法]: 如果说 ...

  4. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  5. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  6. 洛谷P2680:运输计划(倍增、二分、树上差分)

    传送门 文章目录 题目描述 解析 问题 代码 题目描述 解析 求最大值的最小值 容易想到二分 然后...就没有然后了... 看了题解 学会了一个新技能:树上差分 (其实学长之前好像讲过...) 一般的 ...

  7. BZOJ 2144 跳跳棋(神仙建模题,倍增 LCA,二分)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2144 是 hydro 的 BZOJ ...

  8. 2015年下半年计划

    哈哈,毕业两周年.. 出身电子信息工程的我不搞硬件,居然做起了纯软件,事实是做了两年软件. c++出身的我,需要投入java的怀抱,一切为了hdfs+hbase,也为了今后的方向------大数据.云 ...

  9. 上海电信计划2015年用户带宽提高12.5倍

    这样一幕场景不久将变为现实:三代同堂之家同时收看3台以上高清IPTV,互不干扰:一部25GB大小的蓝光DVD用67分钟即可通过宽带下载,是目前4 兆速率的12.5倍:公共场所打开笔记本电脑," ...

最新文章

  1. php设计是什么意思,php的设计模式是什么
  2. Linux epoll
  3. git pull 显示的冲突---解决办法git stash
  4. 51年被发现9次,陶哲轩证明的公式成了重复造轮子?事情并没有这么简单
  5. 开发打开设置洁面_用华为手机,这4个功能一定要打开,不然你的手机只会越用越卡!...
  6. 在Visual Studio 2005里,用ActiveSync来同步模拟器(Windows Mobile 5.0 )
  7. VTK:图片之ImageMathematics
  8. eclipse使用技巧_有效使用Eclipse的热门技巧
  9. helm安装_如何利用 Helm 在 Kubernetes 上快速部署 Jenkins
  10. vs2019安装python库_vs2019安装和使用详细图文教程
  11. 调试错误:InternalErro(seeabovefortraceback):BlasGEMMlaunchfailed:a.shape=(300,1),b.shape=(1,10),m=300,n=
  12. a标签下载文档 a下载文档失败问题 跨域调用
  13. 关于计算机网络简笔画,电脑卡通简笔画图片
  14. Splitter和Joiner使用手册
  15. C语言标识符之——“~“
  16. 电子游戏设计与制作 第一章 计算机游戏概述
  17. UML时序图速查——架构设计必备技能
  18. 使用新版FLIR (FLIR_ADAS_v2) 训练Faster RCNN模型
  19. 产品经理必须要了解的26个文档
  20. python calu_Python的Woe:Woe库功能的介绍、安装和使用,之,woewoe,库函数,简介,方法,详细,攻略...

热门文章

  1. ligergrid 奇偶行效果_怎么护发才是真的有效果的?
  2. c语言做贪吃蛇vs2015,熬书几个月,终于编出简易的贪吃蛇了,VS2013
  3. PostgreSQL 、springboot 、spring data jpa 集成
  4. VMware下Centos7快速搭建vsftpd
  5. sql 查询优化小计
  6. .NET中栈和堆的比较1
  7. Re: 社团改革还让不让人活了?
  8. Dom对象、JavaScript对象、jQuery对象区别
  9. Python 异步操作文件 aiofiles
  10. mongodb $unwind 聚合管道