题意

对一个容器进行一系列操作,这题题目有点问题,操作说明多了个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());
    }
}