BZOJ2276:[POI2011]Temperature
阿新 • • 發佈:2019-01-27
amp read tail pan turn namespace 假設 https 代碼
淺談隊列:https://www.cnblogs.com/AKMer/p/10314965.html
題目傳送門:https://lydsy.com/JudgeOnline/problem.php?id=2276
假設一段區間滿足不降的要求,那麽充要條件是\(l_{max}<=r_{min}\)
所以我們用單調隊列維護\(l\)的最大值然後更新答案即可。
時間復雜度:\(O(n)\)
時間復雜度:\(O(n)\)
代碼如下:
#include <cstdio> #include <algorithm> using namespace std; const int maxn=1e6+5; int n,head,tail,ans,pos; int l[maxn],r[maxn],list[maxn]; int read() { int x=0,f=1;char ch=getchar(); for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1; for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0'; return x*f; } int main() { n=read(); for(int i=1;i<=n;i++) l[i]=read(),r[i]=read(); for(int i=1;i<=n;i++) { while(head!=tail&&l[list[tail-1]]<l[i])tail--; while(head!=tail&&l[list[head]]>r[i])pos=list[head++]; list[tail++]=i;ans=max(ans,i-pos); } printf("%d\n",ans); return 0; }
BZOJ2276:[POI2011]Temperature