题目描述
For a dynamic array A={a0,a1,...}of integers, perform a sequence of the following operations:
push(d, x): Add element x at the begining of A, if d=0. Add element x at the end of A, if d=1.
randomAccess(p): Print element ap.
pop(d): Delete the first element of A, if d=0. Delete the last element of A, if d=1.
A is a 0-origin array and it is empty in the initial state.
输入
The input is given in the following format.
q
query1
query2
:
queryq
Each query queryi is given by
0 d x
or
1 p
or
2 d
where the first digits 0, 1 and 2 represent push, randomAccess and pop operations respectively.
randomAccess and pop operations will not be given for an empty array.输出
For each randomAccess, print ap in a line.
样例输入 Copy
11 0 0 1 0 0 2 0 1 3 1 0 1 1 1 2 2 0 2 1 0 0 4 1 0 1 1样例输出 Copy
2 1 3 4 1提示
1≤q≤400,000
0≤p<0≤p< the size of A
−1,000,000,000≤x≤1,000,000,000
代码
#include <bits/stdc++.h>
#include <deque>
using namespace std;
int main()
{
int n;
deque<int> d; //双端队列
cin>>n;
while(n--)
{
int a,b,c;
scanf("%d",&a);
if(a==0){
scanf("%d%d",&b,&c);
if(b) d.push_back(c); //队尾入队
else d.push_front(c); //队头入队
}
if(a==1){
scanf("%d",&b);
cout<<d[b]<<'\n'; //双端队列可直接下标访问
}
if(a==2){
scanf("%d",&b);
if(!b) d.pop_front(); //队头出队
else d.pop_back(); //队尾出队
}
}
return 0;
}