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. vector 基础

    http://classfoo.com/ccby/article/jnevK Vector的存储空间是连续的,list不是连续存储的 vector初始化 vector<int>v; //不 ...

  2. Faster R-CNN教程

    Faster R-CNN教程 最后更新日期:2016年4月29日 本教程主要基于python版本的faster R-CNN,因为python layer的使用,这个版本会比matlab的版本速度慢10 ...

  3. 通过init-connect + binlog 实现MySQL审计功能

    背景: 假设这么一个情况,你是某公司mysql-DBA,某日突然公司数据库中的所有被人为删了. 尽管有数据备份,但是因服务停止而造成的损失上千万,现在公司需要查出那个做删除操作的人. 但是拥有数据库操 ...

  4. java禁止实例化的工具类

    public class Q { /** * @param args */ public static void main(String[] args) { new Person() } } clas ...

  5. js用for of 遍历数组

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. oracleLinux7上安装oracle11g r2(脚本简单配置环境)

    一 环境脚本简单配置 #!/bin/bashmv /etc/yum.repos.d/* /tmpmv iso.repo /etc/yum.repos.d/tar zxvf a.tar.gzmv 7Se ...

  7. Oracle查询字段内容为非数字的记录

    今天在一张3W多记录的表里查非数字的异常数据~数据库太水,记录一发,因为2.5使用人员误输入为2..5.... select t.routecardlist_id,trim(translate(RTR ...

  8. Java之戳中痛点 - (3)三目运算符的两个操作数类型尽量一致

    先看一个例子: package com.test; public class TernaryOperator { public static void main(String[] args) { in ...

  9. 修改firefox默认下载路径

    菜单栏---编辑---首选项--在常规页就可以看到下载设置了

  10. itext转html为pdf遇到的问题

    记录一下使用itext将html文件转为pdf文件遇到的一些问题 1.中文不显示 原因:itext默认不支持中文 解决方法:引入中文字体 需要注意的是在java代码中设置好中文字体后,还需要在html ...