Link:

BZOJ 4082 传送门

Solution:

对于链上这样的问题贪心就好了

如果在一个环上,肯定需要将环转化成链,$O(n)$确定起点才能计算

但枚举每个节点拆环再贪心的复杂度为$O(n^2)$,明显会超时

于是我们要将已知起点,计算从起点走完一圈的距离的时间复杂度降到$log(n)$

这时联想到倍增算法:

将所有区间按照右端点排序后,将每个区间和其能达到的右端点最远的区间相连

可以发现,这样就形成了一个$DAG$(每个点都只会向后连边)

接下来只要对于每个点在$DAG$上倍增即可,计算当右端点回到该点起点时的距离

Tip:$BZOJ$的题面上没写如无解则输出$impossible$

Code:

#include <bits/stdc++.h>

using namespace std;
typedef pair<int,int> P;
#define X first
#define Y second
const int MAXN=1e6+,INF=<<;
P dat[MAXN];
int l,n,f[MAXN][],mn[MAXN],res; bool cmp(P a,P b){return a.Y<b.Y;} int main()
{
scanf("%d%d",&l,&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&dat[i].X,&dat[i].Y);
if(dat[i].Y<dat[i].X) dat[i].Y+=l;
}
sort(dat+,dat+n+,cmp); mn[n+]=INF;res=INF;
for(int i=n;i>=;i--) mn[i]=min(mn[i+],dat[i].X);
int cur=;
for(int i=;i<=n;i++)
{
while(cur<n && mn[cur+]-<=dat[i].Y) cur++;
if(cur!=i) f[i][]=cur;
}
for(int i=n;i>=;i--)
for(int j=;j<=;j++)
f[i][j]=f[f[i][j-]][j-]; for(int i=;i<=n;i++)
{
int cur=i,cnt=;
for(int j=;j>=;j--)
if(f[cur][j] && dat[f[cur][j]].Y<dat[i].X+l-) cur=f[cur][j],cnt+=<<j;
if(f[cur][] && dat[cur].Y<dat[i].X+l-) cur=f[cur][],cnt++;
if(dat[cur].Y>=dat[i].X+l-) res=min(res,cnt);
}
if(res==INF) puts("impossible");
else printf("%d\n",res);
return ;
}

[BZOJ 4082] Surveillance的更多相关文章

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

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

  2. bzoj AC倒序

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

  3. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  4. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  5. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  6. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  7. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  8. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  9. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

随机推荐

  1. Cube 找规律

    这道题我们经过简单的推测便可得知3个之前特判,四个之后就成为了一般状况,就是我们每侧都是走整个整个的|_|之后零的走|||. 考试的时候包括平时做题,许多正确的感性比理性证明要强得多. #includ ...

  2. noip 2011观光公交

    P1315 观光公交 95通过 244提交 题目提供者该用户不存在 标签贪心递推2011NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 风景迷人的小城Y 市,拥有n 个美 ...

  3. angular-translate加载.json文件进行翻译

    这是这个demo的目录结构,总共有两个文件:locale-chinese.json和translation11.html locale-chinese.json文件的内容是: { "beau ...

  4. Spring Framework框架解析(1)- 从图书馆示例来看xml文件的加载过程

    引言 这个系列是我阅读Spring源码后的一个总结,会从Spring Framework框架的整体结构进行分析,不会先入为主的讲解IOC或者AOP的原理,如果读者有使用Spring的经验再好不过.鉴于 ...

  5. GDSOI2015的某道题目

    分析: 看到这个$3^i$就觉得很奇怪的样子...为什么一定要是$3^i$...而且不能重复使用... 不能重复使用就代表不会产生进位,那么一定是若干个$3^i$相加减的式子... 仔细观察,我们发现 ...

  6. 【BZOJ1475】方格取数 [最小割]

    方格取数 Time Limit: 5 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 在一个n*n的方格里,每个格子里都有一 ...

  7. bzoj 1601 最小生成树

    原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1601 最小生成树的比较水的题,我们只需要加一个源点,连向所有的点,边权为每个点建水库的代价 ...

  8. Linux c括号作用域【原创笔记】

    大师指点后,所做的笔记,很感谢一起愿意研究技术的同事,以下不是本人原创,是他分析的成果 #include <stdio.h> #include <time.h> struct ...

  9. doxygen使用

    前言 下面主要讲解linux下Doxygen命令行实现html文档生成的操作,当然也有界面版本操作方式,linux下安装doxygen-gui即可通过doxywizard开启界面操作,windows下 ...

  10. 【 Keepalived 】Nginx or Http 主-备模式

    一.主-备模式: 操作系统:centos 6.4 x64 ka1: 192.168.2.10 ka2: 192.168.2.11 vip: 192.168.2.200 ka1-master服务器配置 ...