题意
对一个容器进行一系列操作,这题题目有点问题,操作说明多了个a
1 从前面插入元素a
2 从前面删除一个元素
3 从后面插入一个元素a
4 从后面删除一个元素
5 将整个容器头尾翻转
6 输出个数和所有元素
7 对所有元素进行从小到大排序
思路
因为要从队头队尾插入删除元素,我们可以用STL中的deque(双端队列)便于操作
这些是deque的一些基本操作:
push_back(x)/push_front(x) //把x压入后/前端
back()/front() //访问(不删除)后/前端元素
pop_back() pop_front() //删除后/前端元素
empty() //判断deque是否空
size() //返回deque的元素数量
clear() //清空deque
支持通过sort(d.begin(),d.end())进行排序。
代码
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize(2) #pragma GCC optimize(3) typedef long long ll; typedef unsigned long long ull; #define pb push_back #define pll pair<ll,ll> #define INF 0x3f3f3f3f const int mod = 1e9+7; const int maxn = 1e5+5; inline ll read(){ ll s = 0, w = 1; char ch = getchar(); while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); } while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar(); return s * w; } deque<int> q; int main(){ int n = read(),m = read(); while(m--){ int op = read(); if(op == 1){ int a = read(); q.push_front(a); } else if(op == 2) q.pop_front(); else if(op == 3){ int a = read(); q.push_back(a); } else if(op == 4) q.pop_back(); else if(op == 5) reverse(q.begin(),q.end()); else if(op == 6){ cout<<q.size()<<endl; for(int i = 0 ; i < q.size() ; ++i) cout<<q[i]<<" "; cout<<'\n'; } else sort(q.begin(),q.end()); } }