网站建设时间安排/seo搜索引擎优化工资多少钱
小明今天课上刚学习了队列数据结构,你看这个队列他又长又宽,就像这个碗他又大又圆。
不过小明觉得队列只能从队尾插入,队首弹出太无聊了,于是他就想重新设计以下,以使队列能够翻转。
翻转:队首变为队尾,队尾变为队首。
那么现在队列变成了有以下三个操作的队列:
队尾插入
队首弹出
翻转队列
初始时,这里有一个空队列,我们对他进行以上三个操作。
输入格式:
第一行一个正整数q(1<=q<=400000),表示对队列的操作次数,初始时,队列为空。
接下来q行,
若是 1 x,则将x插入当前队列(1<=x<=1000000)。
若是 2,则从队列中弹出队首元素(若当前队列为空,则忽略此操作)
若是 3,则翻转当前队列
输出格式:
对于每个输入输出一行一个整数,为当前队列队首和队尾的异或值(这里的异或是按位异或,运算符为 ‘^’)。
若当前队列为空,则输出-1
输入样例1:
5
1 2
1 3
3
2
2
输出样例1:
0
1
1
0
-1
输入样例2:
4
1 2
3
1 3
3
输出样例2:
0
0
1
1
#include <bits/stdc++.h>
using namespace std;
int main(){int n,flag=1;deque<int> d; scanf("%d",&n);for(int i=0;i<n;i++){int a,b;scanf("%d",&a);if(a==1){scanf("%d",&b);if(flag==1) d.push_back(b);//正着的 else d.push_front(b);}else if(a==2&&d.size()){if(flag==1) d.pop_front();else d.pop_back();}else if(a==3) flag*=-1;if(d.size()) printf("%d\n",d.at(0)^d.at(d.size()-1));else printf("-1\n");}return 0;
}