bzoj 2276: [Poi2011]Temperature——單調隊列
阿新 • • 發佈:2017-09-16
連續 none input per open 路徑 span inpu 位置
6 10
1 5
4 8
2 5
6 8
3 5
然後就扔進隊列裏面
比r大的路勁肯定都不合法 直接扔掉
然後還在隊列裏面的路勁答案就+1
+1的處理可以開一個全局變量
一條路勁扔進隊列裏面的時候答案記為v-當前位置
取出的時候再加上現在的位置就可以了
Description
某國進行了連續n天的溫度測量,測量存在誤差,測量結果是第i天溫度在[l_i,r_i]範圍內。
求最長的連續的一段,滿足該段內可能溫度不降
第一行n
下面n行,每行l_i,r_i
1<=n<=1000000
一行,表示該段的長度
Sample Input
66 10
1 5
4 8
2 5
6 8
3 5
Sample Output
4 ———————————————————————————————————— 這道題其實就是維護一個連續的不下降序列 考慮維護一個隊列 對每一個位置 當前位置區間l r 比l小的路徑就彈出 彈出的路勁中取個max就是當前l的答案#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=-1View Code; 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——單調隊列