点击这里查看原题
因为每加入一天都要确保该天的r值大于等于已选中天的l的最大值,因此维护l值的递减队列。
/*
User:Small
Language:C++
Problem No.:2096
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
const int M=1e6+5;
int q[M],s,mn[M],mx[M],n,l,r,ans;
int main(){
freopen("data.in","r",stdin);//
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&mn[i],&mx[i]);
l=s=1;
for(int i=1;i<=n;i++){
while(l<=r&&mn[i]>mn[q[r]]) r--;
q[++r]=i;
while(mn[q[l]]>mx[i]){
s=q[l]+1;
while(q[l]<s) l++;
}
ans=max(ans,i-s+1);
}
printf("%d\n",ans);
return 0;
}

本文介绍了一种使用递减队列进行优化处理的算法,该算法通过维护一个递减队列来解决特定问题,确保每次加入的新元素满足条件,提高了处理效率。
284

被折叠的 条评论
为什么被折叠?



