本文主要是介绍[BZOJ 2276][Poi2011]Temperature:单调队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击这里查看原题
因为每加入一天都要确保该天的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;
}
这篇关于[BZOJ 2276][Poi2011]Temperature:单调队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!