bzoj 3126 单调队列优化dp
2017-09-24 07:49
441 查看
能转移的最左是其左边完整区间的最右左端点,最右是能覆盖它的最左左端点-1
#pragma GCC optimize ("O3") #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #define N 200005 using namespace std; int l ,r ,n,m,f ,q ; int read(){ int a=0;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9'){a=a*10+(ch^48);ch=getchar();} return a; } int main(){ n=read(); m=read(); for(register int i=1;i<=n+1;++i)r[i]=i-1; for(register int i=1,x,y;i<=m;++i){ x=read(); y=read(); r[y]=min(r[y],x-1); l[y+1]=max(l[y+1],x); } for(register int i=2;i<=n+1;++i) l[i]=max(l[i],l[i-1]); for(register int i=n;i>=1;--i) r[i]=min(r[i],r[i+1]); /*for(int i=1;i<=n;i++) printf("%d %d %d\n",i,l[i],r[i]);*/ for(register int i=1,j=1,head=1,tail=1;i<=n+1;++i){ while(j<=r[i]&&j<=n){ if(f[j]==-1){j++;continue;} while(head<=tail&&f[j]>f[q[tail]])--tail; q[++tail]=j++; } while(head<=tail&&q[head]<l[i])++head; if(head<=tail)f[i]=f[q[head]]+1; else f[i]=-1; //printf("%d %d\n",i,f[i]); } if(f[n+1]==-1)printf("%d\n",f[n+1]); else printf("%d\n",f[n+1]-1); return 0; }
相关文章推荐
- bzoj3126[Usaco2013 Open]Photo 单调队列优化dp
- bzoj 3126: [Usaco2013 Open]Photo——单调队列优化dp
- bzoj3831 [Poi2014]Little Bird(单调队列优化dp)
- BZOJ 1010 [HNOI2008]玩具装箱toy(单调队列优化DP)
- bzoj5185 [Usaco2018 Jan]Lifeguards(dp+单调队列优化)
- 【单调队列优化DP】BZOJ1855-[Scoi2010]股票交易
- 【bzoj1499】[NOI2005]瑰丽华尔兹 【单调队列优化dp】
- Bzoj - 1499 [Noi2005] 瑰丽华尔兹 [DP][单调队列优化]
- bzoj1233: [Usaco2009Open]干草堆tower 单调队列优化dp
- [BZOJ1855][Scoi2010]股票交易(DP+单调队列优化)
- [二分 后缀自动机 单调队列优化DP] BZOJ 2806 [Ctsc2012]Cheat
- 【BZOJ3831】Little Bird,单调队列优化DP
- bzoj 3126: [Usaco2013 Open]Photo (DP+单调队列)
- bzoj 2442: [Usaco2011 Open]修剪草坪 单调队列优化dp
- BZOJ 1499 [NOI2005] 瑰丽华尔兹 | 单调队列优化DP
- BZOJ.1010.[HNOI2008]玩具装箱toy(DP 斜率优化/单调队列 决策单调性)
- bzoj1233 [Usaco2009Open]干草堆tower(单调队列优化DP)
- bzoj1499[NOI2005]瑰丽华尔兹 单调队列优化dp
- 【BZOJ2806】[Ctsc2012]Cheat 广义后缀自动机+二分+单调队列优化DP
- BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP