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. JS格式化时间(支持小程序,兼容IOS)

    })-(\d{})-(\d{})T(\d{}):(\d{}):(\d{})/ /** * @function format time * @param val, format * @return {s ...

  2. Vim使用小记(二)插件管理

    By francis_hao    Mar 8,2017 Vundle Vundle,全称为Vim bundle,是一个插件管理器.可以对vim插件进行安装和卸载. Vundle的安装方法看这里[参考 ...

  3. POJ1984:Navigation Nightmare(带权并查集)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 7871   Accepted: 2 ...

  4. idea中mybatis-plugin破解

    Mybatis Plugin 一.Mybatis Plugin插件是什么 提供Mapper接口与配置文件中对应SQL的导航 编辑XML文件时自动补全 根据Mapper接口, 使用快捷键生成xml文件及 ...

  5. 批量添加公钥给server的bash

    Bash 脚本 #/bin/bash adduser vlmonitor mkdir -p /home/vlmonitor/.ssh chown -R vlmonitor.vlmonitor /hom ...

  6. jquery.cookie.js 的使用指南

    转自:http://www.cnblogs.com/yjzhu/p/4359420.html 介绍: jquery.cookie.js 是一款轻量级的 cookie 插件,可以读取,写入和删除 coo ...

  7. 完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码

    <script  type="text/javascript"> //设为首页 function SetHome(obj,url){     try{         ...

  8. IDEA新建时选项没有java class问题

    解决办法: 点击你的project F4打开project stucture 点击左边的module 点击右边的source后添加src就可以了  添加的src就是源码可以放置的地址

  9. 在Idea中使用Eclipse编译器

    Eclipse编译器对Javac编译器的优点如下: 1.Proceed on errors 如果使用Javac编译器,你除了在执行之前修复所有错误之外没有其它的选择.然而Eclipse编译器却可以不管 ...

  10. Linux内核学习之中断 中断本质【转】

    转自:http://www.linuxidc.com/Linux/2011-11/47657.htm [中断概述] 中断本质上是一种特殊的电信号,由硬件设备发向处理器.异常和中断的不同是异常在产生时必 ...