[BZOJ 4082] Surveillance
Link:
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的更多相关文章
- 【BZOJ-4082】Surveillance 树链剖分 LCA + 贪心
4082: [Wf2014]Surveillance Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 260 Solved: 100[Submit][ ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
- 【清华集训】楼房重建 BZOJ 2957
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
随机推荐
- HttpClientUntils工具类的使用测试及注意事项(包括我改进的工具类和Controller端的注意事项【附 Json 工具类】)
HttpClient工具类(我改过): package com.taotao.httpclient; import java.io.IOException; import java.net.URI; ...
- MyBatis对象关联关系----多对多的保存与查询
模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...
- 3中转换JSON数据的方式
一:前言 来公司一个星期,把最近做的东西梳理下,并把觉得有必要的知识点记载下,现在传数据很多都是用JSON来传数据,所以我就找了集中传json的方式,其实是有五种的,但是有一个我没有用过,太陌生了,上 ...
- 学习正则表达式及c#应用
1.0正则表达式语法 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”).模式描述在搜索文本时要匹配的一个或多个字符串. 正则表达式示例 表达式 ...
- 教主泡嫦娥(RQNOJ 595)
题目描述 [问题背景] 2012年12月21日下午3点14分35秒,全世界各国的总统以及领导人都已经汇聚在中国的方舟上. 但也有很多百姓平民想搭乘方舟,毕竟他们不想就这么离开世界,所以他们决定要么登上 ...
- 【BZOJ3029】守卫者的挑战 [期望DP]
守卫者的挑战 Time Limit: 2 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 打开了黑魔法师Vani的大门,队 ...
- php session 阻塞 过期不自动清除session文件
php默认session session_start后,php就会打开session文件,然后同一时间用户再用那个session_id访问,就会被前面那个请求阻塞直到前面一个访问结束才会释放文件在使 ...
- hashlib,suprocess,configparser模块
十 hashlib模块 1.什么叫hash:hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 2.hash值的特点是: 2.1 只要传入的内容一样,得到的hash值必然一样==== ...
- MYSQL学习心得 优化
这一篇主要介绍MYSQL的优化,优化MYSQL数据库是DBA和开发人员的必备技能 MYSQL优化一方面是找出系统瓶颈,提高MYSQL数据库整体性能:另一方面需要合理的结构设计和参数调整,以提高 用户操 ...
- [Leetcode Week1]Longest Substring Without Repeating Characters
Longest Substring Without Repeating Characters题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/longes ...