某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内。
求最长的连续的一段,满足该段内可能温度不降
标签:zoj return pen font 位置 style == sam play
某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内。
求最长的连续的一段,满足该段内可能温度不降
第一行n
下面n行,每行l_i,r_i
1<=n<=1000000
一行,表示该段的长度
#include<cstdio> #include<cstring> #include<algorithm> using std::max; const int M=1e6+7; int read(){ int ans=0,f=1,c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘) f=-1; c=getchar();} while(c>=‘0‘&&c<=‘9‘){ans=ans*10+(c-‘0‘); c=getchar();} return ans*f; } int n,l,r,ans; int ql=1,qr; struct node{int h,v;}q[M]; int main(){ n=read(); for(int i=1;i<=n;i++){ l=read(); r=read(); while(ql<=qr&&q[ql].h>r) ql++; int h=1-i; while(ql<=qr&&q[qr].h<=l) h=max(h,q[qr].v),qr--; q[++qr].h=l; q[qr].v=h; ans=max(ans,q[ql].v+i); }printf("%d\n",ans); return 0; }
bzoj 2276: [Poi2011]Temperature——单调队列
标签:zoj return pen font 位置 style == sam play
原文地址:http://www.cnblogs.com/lyzuikeai/p/7532039.html