双向队列用法:
双向队列就是可以在队首,队尾出进的队列。
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() | 返回双向队列的配置器 |
题目来自蓝桥杯模拟赛,可用双向队列模拟。
#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; }