n天的温度测量,测量存在误差,测量结果是第 i天温度在[ Li,Ri ]
求最长的连续的一段,满足该段内可能温度不降。
一个纯粹的单调队列
要满足 R[ i] >= max{ L[k] } j<=k<=i
(维护一个L[i] 增的队列)
#include<iostream> #include <algorithm> #include <cstring> using namespace std; const int N=1e6+5; int L[N],R[N]; int n,q[N],hh,tt; void solve(){ int ans= 0,t; hh=1,tt=0; q[++tt]=0; for(int i=1;i<=n;i++){ while(hh<=tt&&R[i]<L[q[hh]]) hh++; if(hh<=tt) ans=max(ans,i-q[hh-1]); while(hh<=tt&&L[i]>L[q[tt]]) tt--; q[++tt]=i; } cout<<ans<<endl; } signed main(){ cin>>n; for(int i=1;i<=n;i++)cin>>L[i]>>R[i]; solve(); }