题目
题目描述:栗酱有一天在网上冲浪的时候发现了一道很有意思的数据结构题。
该数据结构形如长条形。
一开始该容器为空,有以下七种操作。
1 a从前面插入元素a
2 从前面删除一个元素
3 a从后面插入一个元素
4 从后面删除一个元素
5 将整个容器头尾翻转
6 输出个数和所有元素
7 对所有元素进行从小到大排序
输入描述:
只有一组数据,第一行n≤50000,m≤200000, a≤100000 代表最大数据数目和操作次数。
接下来每一行一个操作如上描述。保证所有操作合法(不会在容器为空时删除元素)。
6、7操作共计不会超过10次。
当执行6操作时,第一行先输出当前的个数,然后从头到尾按顺序输出,每两个元素之间用一个空格隔开,末尾不能有空格。
解析
知识点
- 真就简单的数据结构呗:要不就用STL,要不就数组手动模拟。随你咯~
算法操作
- STL可以用vector(变长数组),也可以用deque(双端队列)。这里当然用deque简单一点(有STL为啥要手动模拟呢嘿嘿嘿)。
部分STL介绍
- deque就是一个两头操作的队列呗。
- 有头插,尾插:push_front()/push_back()。
- 有头删,尾删:pop_front()/pop_back()。
- 然后再用一些工作性算法:sort(排序),reverse(倒置)。
- 就这样呗。
打代码:
- 输入。
- 分情况STL。
- 看代码~
AC代码
#include <iostream> #include <algorithm> #include <deque> using namespace std; #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); //代码预处理区 const int MAX = 1e5 + 7; deque<int> dq; //全局变量区 int main() { IOS; int n, T; cin >> n >> T; while (T--) { int way; cin >> way; if (1 == way) { int x; cin >> x; dq.push_front(x); } else if (2 == way) dq.pop_front(); else if (3 == way) { int x; cin >> x; dq.push_back(x); } else if (4 == way) dq.pop_back(); else if (5 == way) reverse(dq.begin(), dq.end()); else if (6 == way) { int len = dq.size(); cout << len << endl; for (int i = 0; i < len; i++) cout << dq[i] << " "; cout << endl; } else sort(dq.begin(), dq.end()); } return 0; } //函数区