双端队列 deque

头文件#include<deque>

构造方法

①、创建一个没有任何元素的双端队列:deque<type> deq

②、用另一个类型相同双端队列初始化该双端队列:deque<type> deq(otherDeq)

③、初始化一个固定size的双端队列:deque<type> deq(size)

④、初始化n个相同元素的双端队列:deque<type> deq(n, element)

⑤、初始化双端队列中的某一段元素,从beginend-1:deque<type> deq(begin, end)

操作

①、赋值n个元素的拷贝给双端队列:deq.assign(n,elem)    

②、赋值一段迭代器的值给双端队列:deq.assign(beg,end)

③、添加一个元素在开头(结尾同理):deq.push_front(elem) 

④、删除第一个元素(结尾同理):deq.pop_front()   

⑤、取固定位置的元素:deq.at(index)

⑥、取固定位置的元素:deq[index]       

⑦、返回第一个元素(不检测容器是否为空):deq.front()

⑧、返回最后一个元素(不检测容器是否为空):deq.back()

例题

HUD6375 度度熊学队列

#include<bits/stdc++.h>

using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
const int maxn=15e4+10;
int n,m,w;
map<int,deque<int> > a;
void read(int &x)
{
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}
int main()
{
    int i,j;
    while(scanf("%d%d",&n,&m)!=EOF){
        for(i=1;i<=n;i++) a[i].clear();
        int ki,u,v;
        while(m--){
            read(ki);
            if(ki==1){
                read(u),read(w),read(v);
                if(w==0) a[u].push_front(v);
                else a[u].push_back(v);
            }
            else if(ki==2){
                read(u),read(w);
                if(a[u].empty()){
                    printf("-1\n");
                }
                else{
                    if(w==0){
                        printf("%d\n",a[u].front());
                        a[u].pop_front();
                    }
                    else{
                        printf("%d\n",a[u].back());
                        a[u].pop_back();
                    }
                }
            }
            else{
                read(u),read(v),read(w);
                if(w){
                    a[u].insert(a[u].end(),a[v].rbegin(),a[v].rend()),a[v].clear();
                } 
                else a[u].insert(a[u].end(),a[v].begin(),a[v].end()),a[v].clear();
            }
        }
    }
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/solvit/p/9648422.html