[bzoj1107]驾驶考试
考虑如果l和r($l<r$)符合条件,容易证明那么[l,r]的所有点都将会符合条件,因此答案是一个区间
枚举答案区间[l,r],考虑如何判定答案是否合法,也就是要求满足l能到达n且r能到达1,那么预处理出f1[i]表示i能到达1的最少边数,f2[i]表示i能到达n的最少边数,相当于要满足$f1[r]+f2[l]\le k$(注意:这两个不会重复,因为边是有向的)
考虑如何预处理出f1数组(f2数组同理),其实容易发现这就是维护一个每一个位置有多个选择的最长不上升子序列,不妨将每一个位置上的数字从小到大排列,直接求lis即可
最后求答案用单调性维护即可,注意要去掉初始合法的区间长度

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 vector<int>v1[N],v2[N];
5 int n,m,k,x,y,z,ans,a[N],f1[N],f2[N];
6 void add(int k){
7 x=1,y=a[0]+1;
8 while (x<y){
9 z=(x+y>>1);
10 if (a[z]<k)y=z;
11 else x=z+1;
12 }
13 a[0]=max(a[0],x);
14 a[x]=k;
15 }
16 int main(){
17 scanf("%d%*d%d%d",&n,&m,&k);
18 for(int i=1;i<=m;i++){
19 scanf("%d%d%d",&x,&y,&z);
20 if (z)v1[x+1].push_back(y+1);
21 else v2[x].push_back(y+1);
22 }
23 for(int i=1;i<=n;i++){
24 sort(v1[i].begin(),v1[i].end());
25 sort(v2[i].begin(),v2[i].end());
26 }
27 for(int i=2;i<=n;i++){
28 for(int j=0;j<v1[i].size();j++)
29 if ((!j)||(v1[i][j]!=v1[i][j-1]))add(v1[i][j]);
30 f1[i]=i-1-a[0];
31 }
32 memset(a,0,sizeof(a));
33 for(int i=n-1;i;i--){
34 for(int j=0;j<v2[i].size();j++)
35 if ((!j)||(v2[i][j]!=v2[i][j-1]))add(v2[i][j]);
36 f2[i]=n-i-a[0];
37 }
38 for(int i=1,j=1;(i<=n)&&(j<=n);i++){
39 while ((j<=n)&&(f2[i]+f1[j]<=k))j++;
40 ans=max(ans,j-i);
41 }
42 for(int i=1;i<=n;i++)
43 if ((!f1[i])&&(!f2[i]))ans--;
44 printf("%d",ans);
45 }
[bzoj1107]驾驶考试的更多相关文章
- BZOJ1107 : [POI2007]驾驶考试egz
i可以作为起点说明把边反向后可以从1和n到达i. 设fl[i]表示从1到达i至少需要加几条边,fr[i]表示从n到达i至少需要加几条边. 把图上下翻转后,从左往右依次计算fl[i],有fl[i]=i- ...
- [POI2007]驾驶考试egz
题目 BZOJ 神仙题,可比那些氵紫题有意思多了 做法 \(i\)能作为起始点,当\(i\)能到达\(1\)~\(i-1\)和\(i+1\)~\(n\) 这样处理显然会麻烦,因为要从每个点都特判一次 ...
- BZOJ 1107: [POI2007]驾驶考试egz / Luogu P3463 [POI2007]EGZ-Driving Exam (树状数组 LIS)
能从iii走到所有跑道 相当于 能从iii走到111和nnn. 边反向后就相当于 能从111和nnn走到iii. 为了方便叙述,把111~nnn叫做x坐标,111~(m+1)(m+1)(m+1)叫做y ...
- http://codeforces.com/contest/845
A. Chess Tourney time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- 手动挡C1驾驶学车@长建驾校
2015-11-01 下午取钱去长建驾校报名学车 4600(学费) + 100(暂住证) + 30(照片) + 10(体检) 2015-11-14 8:00-12:00 理论课2 光盘10 2015 ...
- (转)深入浅出linux系统umask值及其对应的文件权限讲解
浅出linux系统umask值及其对应的文件权限讲解 原文:http://blog.51cto.com/oldboy/1060032 缘起:1.此文的撰写特别为感谢51cto的博客工作人员和领导,老男 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean
SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean 在SpringBoot中开发AspectJ时,使用CTW的方式来织入代码,由于采用这种形式,切面Bean ...
- bash手册
目录 bash手册 man命令 man man 分页程序(page) Linux手册页惯用的节名 Linux手册页的内容区域 查看命令在Linux手册页中的区域 info页面 help帮助 bash手 ...
- 一次简单的SQL注入绕WAF
本人也是小白一枚,大佬请绕过,这个其实是六月份的时候做的,那时候想多点实战经验,就直接用谷歌搜索找了一些网站,这个是其中一个 1.目标网站 2.发现有WAF防护 3.判断存在注入 4.猜测了一下闭合为 ...
- PublishFolderCleaner 让你的 dotnet 应用发布文件夹更加整洁
大家都知道,在 dotnet 发布时,将会在输出的 publish 文件夹包含所需的依赖.在 .NET Core 开始,引入了 AppHost 的概念,即使是单个程序集,也需要独立的 Exe 可执行文 ...
- [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下)
[源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 目录 [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 0x00 摘要 0x01 前文回顾 0x02 Te ...
- 轻量级 Java 基础开发框架,Solon & Solon Cloud 1.5.48 发布
Solon 已有120个生态扩展插件,此次更新主要为细节打磨: 增加 solon.serialization,做为序列化的基础插件 优化 所有Json序列化插件,使之可方便定制类型序列化 public ...
- java的加载与执行原理详解
java程序从开发到最终运行经历了什么? (31) 编译期: 第一步:在硬盘某个位置(随意),新建一个xxx.java文件 第二步:使用记事本或者其他文本编辑器例如EditPlus打开xxx.java ...
- 【UE4 C++】UObject 创建、销毁、内存管理
UObject 的创建 NewObject 模板类 本例使用 UE 4.26,只剩下 NewObject 用来创建 UObject,提供两个带不同可选参数构造函数的模板类 Outer 表示这个对象的外 ...
- Java:并发笔记-05
Java:并发笔记-05 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 4. 共享模型之内存 本章内容 上一章讲解的 Monitor 主要关注的是访问共享变量 ...
- GitHub README文件生成目录导航
效果 环境说明 [root@C61 ~]# cat /etc/redhat-release CentOS release 6.10 (Final) [root@C61 ~]# uname -a Lin ...