XDOJ_1156_单调队列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XDOJ_1156_单调队列相关的知识,希望对你有一定的参考价值。

http://acm.xidian.edu.cn/problem.php?id=1156

 

递减的单调队列,保存人的编号和入队耐心-入队时间。

 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;

struct st
{
    int num,t;
}s;
deque<st> q;
int n,x;

int main()
{
    while(~scanf("%d",&n))
    {
        while(!q.empty())   q.pop_back();
        int out = 1,cnt = 1;
        for(int i = 1;i <= n;i++)
        {
            scanf("%d",&x);
            switch(x)
            {
                case 1:
                    int tt;
                    scanf("%d",&tt);
                    s.t = tt-i;
                    s.num = cnt++;
                    while(!q.empty() && q.back().t <= s.t)    q.pop_back();
                    q.push_back(s);
                    break;
                case 2:
                    if(q.front().num == out++)  q.pop_front();
                    break;
                case 3:
                    printf("%d\n",q.front().t+i);
            }
        }
    }
    return 0;
}

 

以上是关于XDOJ_1156_单调队列的主要内容,如果未能解决你的问题,请参考以下文章

XDOJ_1089_bfs+优先队列

BZOJ_3316_JC loves Mkk_ 二分答案 + 单调队列

BZOJ_1342_[Baltic2007]Sound静音问题_单调队列

XDOJ_1144_排序+模拟

[bzoj1342][Baltic2007]Sound静音问题_单调队列

BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP