数据结构之单调栈单调队列模板

单调栈

int rear=0;
for(int st=1;st<=N;st++)
{
       while(rear>0&&H[que[rear]]>=H[st])  --rear;
       if(rear==0) le[st]=0;
       else  le[st]=que[rear];
       que[++rear]=st;
 }
View Code

单调队列

int que[maxn],elem[maxn];
    int f=1,r=0;
    for(int i=1;i<K;i++)
    {
        while(r>=f&&elem[que[r]]>=elem[i]) --r;
        que[++r]=i;
    }
    for(int i=K;i<=N;i++)
    {
        while(r>=f&&elem[que[r]]>=elem[i]) --r;
        que[++r]=i;
        while(que[f]+K<=i)  ++f;
        MIN[i-K]=elem[que[f]];
    }
View Code
原文地址:https://www.cnblogs.com/wust-ouyangli/p/5798144.html