题意

给你一个长度为 \(len\) 的环,以及 \(n\) 个区间,要你选择尽量少的区间,使得它们完全覆盖整个环。问最少要多少个区间。

\(len,n\leq 10^6\) .

分析

  • 考虑普通的区间覆盖的贪心做法,这里只需要倍增一下。

  • 如果区间 \(r< l\) 把 \(r\) 设置成 \(r+len\) 。

  • 每个解都一定存在一个区间满足其标号最小,且可以通过后面的区间跳回自己的右边,只需要以这类区间开头即可。

  • 总时间复杂度为 \(O(nlogn)\) .

处理区间覆盖的技巧:记录**后缀最小值 **\(mn\),如果\(mn\leq l+1\) 就让指针++.这样就可以找到最靠后的满足要求的位置。

倍增的时候注意:如果不存在这么长的转移是不能够转移的,否则可能答案(步数)会算大。

代码

#include<bits/stdc++.h>
using namespace std;
#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].last,v=e[i].to)
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long LL;
inline int gi(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return x*f;
}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int N=1e6 + 7,inf=0x3f3f3f3f;
int m,len,ans=inf;
int fa[N][21],mn[N];
struct data{
int l,r;
bool operator <(const data &rhs)const{
if(r!=rhs.r) return r<rhs.r;
return l<rhs.l;
}
}t[N];
int main(){
len=gi(),m=gi();
rep(i,1,m) {
t[i].l=gi(),t[i].r=gi();
if(t[i].r<t[i].l) t[i].r+=len;
}
sort(t+1,t+1+m);
mn[m+1]=inf;
for(int i=m;i;i--) mn[i]=min(t[i].l,mn[i+1]);
for(int i=1,j=1;i<=m;++i){
while(j+1<=m&&mn[j+1]-1<=t[i].r)++j;
if(i!=j) fa[i][0]=j;
}
for(int i=m;i;--i)
for(int j=1;j<=20;++j) fa[i][j]=fa[fa[i][j-1]][j-1]; for(int i=1;i<=m;++i){
int s=1,x=i;
for(int j=20;~j;--j) if(fa[x][j]&&t[fa[x][j]].r-t[i].l+1<len) x=fa[x][j],s+=1<<j;
if(fa[x][0]&&t[x].r-t[i].l+1<len) ++s,x=fa[x][0];
if(t[x].r-t[i].l+1>=len) Min(ans,s);
}
if(ans==inf) puts("impossible");
else printf("%d\n",ans);
return 0;
}

[BZOJ4082][Wf2014]Surveillance[倍增]的更多相关文章

  1. [SCOI2015]国旗计划[Wf2014]Surveillance

    [SCOI2015]国旗计划 A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名 ...

  2. 【BZOJ-4082】Surveillance 树链剖分 LCA + 贪心

    4082: [Wf2014]Surveillance Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 260  Solved: 100[Submit][ ...

  3. 倍增&矩阵乘法 专题复习

    倍增&矩阵乘法 专题复习 PreWords 这两个基础算法我就不多说啦,但是还是要介绍一下" 广义矩阵 "乘法 其实就是把矩阵换成取\(max\),然后都一样... 据神仙 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. 后缀数组的倍增算法(Prefix Doubling)

    后缀数组的倍增算法(Prefix Doubling) 文本内容除特殊注明外,均在知识共享署名-非商业性使用-相同方式共享 3.0协议下提供,附加条款亦可能应用. 最近在自学习BWT算法(Burrows ...

  6. [板子]倍增LCA

    倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...

  7. 在线倍增法求LCA专题

    1.cojs 186. [USACO Oct08] 牧场旅行 ★★   输入文件:pwalk.in   输出文件:pwalk.out   简单对比时间限制:1 s   内存限制:128 MB n个被自 ...

  8. LCA 倍增||树链剖分

    方法1:倍增 1498ms #include <iostream> #include <cstdio> #include <algorithm> #include ...

  9. Codevs 2370 小机房的树 LCA 树上倍增

    题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子, ...

随机推荐

  1. Servlet_Struts2

    百度云链接:https://pan.baidu.com/s/1TNkQ8KN2t1xJFcf_CnTXDQ 密码:i3w8 修改中...

  2. NFS网络共享介绍与使用

    什么是NFS(网络文件系统)? NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.它的主要功 ...

  3. Apache的权限设置与构建虚拟web主机

    实验拓扑图: 实验要求: 1.  搭建WEB服务器,能访问默认站点,并使用awstats软件能监控到默认站点的访问情况. 2.  修改Apache的主配置文件,设置1.10只能访问awstats网站, ...

  4. C# 颜色对照表

    参考资料 :https://www.cnblogs.com/msgarden/p/4949272.html Color.AliceBlue 240,248,255 Color.LightSalmon ...

  5. 记一次隐秘的XSS漏洞挖掘

    前言 在为某客户网站做渗透测试时发现一个有趣的事情.当我访问该网站的某条链接时服务器返回的是404页面.看到这里我当时就下意识的忽略它,但是后来又想了想这也不是完全没有价值,毕竟中间件及其版本都出来了 ...

  6. October 16th 2017 Week 42nd Monday

    The more decisions that you are forced to make alone, the more you are aware of your freedom to choo ...

  7. Mojave使用pyenv安装python-zlib错误

    mojave使用pyenv编译python出现 zipimport.ZipImportError: can't decompress data; zlib not available错误 解决方案: ...

  8. Docker 安装 - Docker 与前端(一)

    Docker 是一个开源的容器引擎,可以方便的对容器进行管理.作为一种新兴的虚拟化方式,跟传统的虚拟化方式相比具有众多优势.<Docker 遇见前端>系列文章,旨在记录如何通过 docke ...

  9. 2-8 R语言基础 日期与时间

    #日期 Date > x<-date()> class(x)[1] "character" > x2 <- Sys.Date()> class( ...

  10. NOI 2018网络同步赛(游记?)

    刚中考完那段时间比较无聊,报名了一个同步赛,报完名才发现成绩单是要挂到网上的,而且因为报的早给了一个很靠前的考号...那布星啊,赶紧学点东西,于是在一周内学了网络流,Treap以及一些数论. Day1 ...