C - Subsequence HDU - 3530

题意:给定一个序列,求一个连续区间满足区间最大差距在l,r之间。

思路:单调队列维护最大值最小值。

分析:记录起点,维护最大值最小值在队头,当队头的差距大于l时出队,出队时选择两个队列中较小的下标,具体过程按照代码跑一遍就差不多可以理解单调队列的作用。

#include
using namespace std;
#define ll long long
#define maxn 25
int n,l,r,s[100005];
int main()
{
    while(~scanf("%d%d%d",&n,&l,&r))
    {
        int m=-1,ans=0;
        dequep;
        dequeq;
        for(int i=0; is[p.back()])
            {
                p.pop_back();
            }
            while(!q.empty()&&s[i]r)
            {
                if(p.front()=l)
                ans=max(ans,i-m);
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

你可能感兴趣的:(栈,队列)