题目

BZOJ

神仙题,可比那些氵紫题有意思多了

做法

\(i\)能作为起始点,当\(i\)能到达\(1\)$i-1$和$i+1$\(n\)

这样处理显然会麻烦,因为要从每个点都特判一次

所以我们转换条件,当且仅当\(i\)能到达\(1\)和\(n\)

这样虽然判断次数少了,但是仍然要每个点跑一遍

转换问题:连反向边,则当且仅当\(1\)和\(n\)能到达\(i\),由于单调性,跑的次数为常数级别

考虑增加边,\(i\)能到达\(1\),转换为且单调序列的补集

显然,向左向右的补集有单调性,扫一遍就好了

My complete code

#include<bits/stdc++.h>
using namespace std;
typedef int LL;
const LL maxn=1e6+9;
LL n,ans,m,p,k;
LL tree[maxn],L[maxn],R[maxn];
inline LL Lowbit(LL x){ return x&-x; }
inline void Modify(LL x,LL val){ for(;x<=m;x+=Lowbit(x)) tree[x]=max(tree[x],val); }
inline LL Qmx(LL x){ LL ret(0); for(;x;x-=Lowbit(x)) ret=max(ret,tree[x]); return ret; } struct node{
LL to,nxt,val;
}Ldis[maxn],Rdis[maxn];
LL Lnum,Rnum;
LL Lhead[maxn],Rhead[maxn];
inline void RI(LL u,LL v){
Rdis[++Rnum]=(node){v,Rhead[u],0}; Rhead[u]=Rnum;
}
inline void LI(LL u,LL v){
Ldis[++Lnum]=(node){v,Lhead[u],0}; Lhead[u]=Lnum;
}
int main(){
scanf("%d%d%d%d",&n,&m,&p,&k); ++m;
for(LL i=1;i<=p;++i){
LL x,y,op; scanf("%d%d%d",&x,&y,&op);
y=m-y;
if(!op) RI(x,y);
else LI(x+1,y);
}
for(LL i=2;i<=n;++i){
for(LL j=Lhead[i];j;j=Ldis[j].nxt) L[i]=max(L[i],Ldis[j].val=Qmx(Ldis[j].to)+1);
for(LL j=Lhead[i];j;j=Ldis[j].nxt) Modify(Ldis[j].to,Ldis[j].val);
L[i+1]=L[i]; L[i]=i-1-L[i];
}
memset(tree,0,sizeof(tree));
for(LL i=n-1;i>=1;--i){
for(LL j=Rhead[i];j;j=Rdis[j].nxt) R[i]=max(R[i],Rdis[j].val=Qmx(Rdis[j].to)+1);
for(LL j=Rhead[i];j;j=Rdis[j].nxt) Modify(Rdis[j].to,Rdis[j].val);
R[i-1]=R[i]; R[i]=n-i-R[i];
}
LL r=1,free(0);
for(LL l=1;l<=n;++l){
while(r<=n && L[r]+R[l]<=k) ++r;
ans=max(ans,r-l);
if(!L[l] && !R[l]) ++free;
}
printf("%d\n",ans-free);
return 0;
}

[POI2007]驾驶考试egz的更多相关文章

  1. BZOJ1107 : [POI2007]驾驶考试egz

    i可以作为起点说明把边反向后可以从1和n到达i. 设fl[i]表示从1到达i至少需要加几条边,fr[i]表示从n到达i至少需要加几条边. 把图上下翻转后,从左往右依次计算fl[i],有fl[i]=i- ...

  2. 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 ...

  3. bzoj AC倒序

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

  4. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  5. BZOJ1098: [POI2007]办公楼biu

    从问题可以看出是求补图的连通块及点数 但补图太大.所以考虑缩小规模. 当一个点归属于一个连通块后,它以后就不需要了.所以可以用链表,删去这个点,也就减小了规模. 一个点开始bfs,每个点只会进队一次, ...

  6. BZOJ1097: [POI2007]旅游景点atr

    ..k次最短路后,考虑如何满足先走一些点 用状压dp,每一个点考虑它所需要经过的点a[i],当当前走过的点包含a[i]时,i 这个点才可以到达. 写的时候用记忆化搜索. #include<bit ...

  7. BZOJ 1101: [POI2007]Zap

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2262  Solved: 895[Submit][Status] ...

  8. BZOJ 1100: [POI2007]对称轴osi

    1100: [POI2007]对称轴osi Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 630  Solved: 243[Submit][Statu ...

  9. BZOJ 1111: [POI2007]四进制的天平Wag

    1111: [POI2007]四进制的天平Wag Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 223  Solved: 151[Submit][St ...

随机推荐

  1. TP中单字母快捷函数总结

    ThinkPHP中有许多使用简便的单字母函数,可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找.1.U() URL组装 支持不同URL模式 U($ur ...

  2. Matlab字符串分割

    data = '1.21, 1.985, 1.955, 2.015, 1.885'; C = strsplit(data,', ') C = '1.21' '1.985' '1.955' '2.015 ...

  3. Unicode与UTF-8互转(c语言和lua语言)

    1. 基础 1.1 ASCII码 我们知道, 在计算机内部, 全部的信息终于都表示为一个二进制的字符串. 每个二进制 位(bit)有0和1两种状态, 因此八个二进制位就能够组合出 256种状态, 这被 ...

  4. Eclipse: Android Device Chooser - Unknown Target

    公司最近所有的项目都使用到了Android开发手机(或PDA)应用.所需要的Android开发技术并不是非常复杂,因为我们的底层方法全部使用WebServcie写好了,做Android开发的人员只需要 ...

  5. 【BZOJ3239】Discrete Logging BSGS

    [BZOJ3239]Discrete Logging Description Given a prime P, 2 <= P < 231, an integer B, 2 <= B ...

  6. EasyNVR摄像机无插件直播进行摄像机云台控制的接入及调用详解

    EasyNVR云台接入及控制详解 摄像机云台控制在摄像机当中很常见摄像机能将当前状态下云台的水平角度.倾斜角度和摄像机镜头焦距等位置参数存储到设备中,需要时可以迅速调用这些参数并将云台和摄像头调整至该 ...

  7. mongodb基础操作

    查询选择器>db.customers.find({age:{$lt:102}})查询age小于102的数据$lte表示小于或等于$gt表示大于$gte表示大于或等于>db.customer ...

  8. Introduction to Mathematical Thinking - Week 7

    Q: Why did nineteenth century mathematicians devote time to the proof of self-evident results? Selec ...

  9. delphi下excel的操作

    1.首先引用comobj.varints单元 2.声明xlApp,xlBook, xlSheet,picture: Variant; 3.基本操作 xlApp:=CreateOleObject('Ex ...

  10. badboy脚本参数化和检查点

    一.badboy脚本参数化 文本参数化 方式一:直接在Variablesl ist添加参数化变量和值,然后在Script里面找到对应需要参数化的内容-属性,进行替换,参数化名需要用${XX}引用: 方 ...