bzoj 2276: [Poi2011]Temperature 单调队列
2017-05-15 18:45
357 查看
题意
某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内。求最长的连续的一段,满足该段内可能温度不降。
n<=1000000,-10^9<=li,ri<=10^9
分析
设i之前的连续若干个区间的最大下界为mx,那么只要r[i]>=mx则i可以接到这若干个后面。那么我们就用一个单调队列来维护区间下界的最大值就好了。
代码
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; const int N=1000005; int n,x ,y ,id ,q ; int main() { scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); int head=1,tail=1,l=1,ans=1,now=x[1]; q[1]=x[1];id[1]=1; for (int i=2;i<=n;i++) { while (head<=tail&&q[tail]<x[i]) tail--; q[++tail]=x[i];id[tail]=i; if (y[i]<now) while (head<=tail&&q[head]>y[i]) l=id[head]+1,head++,now=q[head]; else now=max(now,x[i]); ans=max(ans,i-l+1); } printf("%d",ans); return 0; }
相关文章推荐
- [BZOJ2276][Poi2011]Temperature(单调队列)
- bzoj 2276: [Poi2011]Temperature(单调队列)
- BZOJ 2276: [Poi2011]Temperature|单调队列
- bzoj2276: [Poi2011]Temperature(单调队列/堆)
- 【BZOJ 2276】[Poi2011]Temperature 单调队列
- BZOJ 2276 Poi2011 Temperature 单调队列
- bzoj 2276: [Poi2011]Temperature——单调队列
- [BZOJ 2276][Poi2011]Temperature:单调队列
- BZOJ2276 [Poi2011]Temperature 【单调队列】
- 【bzoj 2276】[Poi2011]Temperature(单调队列)
- [bzoj2276][POI2011]Temperature(单调队列)
- 2276: [Poi2011]Temperature 单调队列
- [BZOJ] 2276: [Poi2011]Temperature
- BZOJ2276: [Poi2011]Temperature
- [POI 2011]Temperature(单调队列)
- BZOJ2276 [Poi2011]Temperature
- 【bzoj2276】[Poi2011]Temperature
- bzoj2276【poi2011】Temperature
- BZOJ2276: [Poi2011]Temperature
- bzoj[2442][Usaco2011 Open]修剪草坪(单调队列+dp)