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();
}
浙公网安备 33010602011771号