单调队列是这样一种队列,不但队列中下标是递增的,队列中的值也是单调的(单调递增或dijian)

#include<stdio.h>
#include<string.h>
#include<queue>
#include<deque>
using namespace std;

struct P
{
    int i;
    int v;
    P(int a,int b)
    {
        i=a;
        v=b;
    }
};

deque<P> q; 

void PushMax(int i,int v)
{
    while(!q.empty()&&q.back().v<v)
        q.pop_back();
    q.push_back(P(i,v));    
}

int main()
{
    int cas;
    scanf("%d",&cas);
    for(int T=1;T<=cas;T++)
    {
        int head=0;
        int tail=0;
        char cmd[100];
        while(!q.empty()) q.pop_back();
        scanf("%s",cmd);
        while(scanf("%s",cmd)&&cmd[0]!='E')
        {

            if(cmd[0]=='C')
            {
                char name[50];
                scanf("%s",name);
                int tv;
                scanf("%d",&tv);
                PushMax(tail++,tv);
            }

            if(cmd[0]=='Q')
            {
                if(q.size()==0)
                    printf("-1\n");
                else
                    printf("%d\n",q.front().v);
            }

            if(cmd[0]=='G')
            {
                if(q.front().i==head)
                    q.pop_front();
                head++;
            }

        }
    }
}

Zeus247
27 声望2 粉丝

Nothing is impossible; impossible itself say I m possible