双向队列deque用法

双向队列用法:

双向队列就是可以在队首,队尾出进的队列。

Constructors 
创建一个新双向队列
Operators 比较和赋值双向队列
assign() 设置双向队列的值
at() 返回指定的元素
front() 返回第一个元素
back() 返回最后一个元素
erase() 删除一个元素
clear() 删除所有元素
empty() 返回真如果双向队列为空
begin() 返回指向第一个元素的迭代器
end() 返回指向尾部的迭代器
rbegin() 返回指向尾部的逆向迭代器
rend() 返回指向头部的逆向迭代器
push_front()  在头部加入一个元素
push_back() 在尾部加入一个元素
pop_front() 删除头部的元素
pop_back() 删除尾部的元素
insert() 插入一个元素到双向队列中
size() 返回双向队列中元素的个数
max_size() 返回双向队列能容纳的最大元素个数
resize() 改变双向队列的大小
swap() 和另一个双向队列交换元素
get_allocator()  返回双向队列的配置器

 

题目来自蓝桥杯模拟赛,可用双向队列模拟。

双向队列deque用法

 

 

 

#include<iostream>
#include<queue>
#include<deque>
using namespace std;
int main()
{
    int T, N, a, b, c, ans = 1;
    cin >> T;
    while (T--) {
        ans = 1;
        cin >> N;
        int n = N;
        cin >> a;
        n--;
        deque<int> r;
        r.push_front(a);
        while (n+1) {
            if (r.size() != 0) {
                b = r.front();
                c = r.back();
                if (b == ans) {
                    r.pop_front();
                    ans++;
                    continue;
                }
                else if (c == ans) {
                    r.pop_back();
                    ans++;
                    continue;
                }
            }
            if (n > 0) {
                cin >> a;
                r.push_front(a);
            }
            n--;
        }
        if (r.size() == 0)
            cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

 

上一篇:.net 操作excel


下一篇:Day86 滑动窗口最大值