题目描述
Deque
For a dynamic array A={a0,a1,…} of integers, perform a sequence of the following operations:
0-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.
1-randomAccess(p): Print element ap.
2-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
:
query n
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.
1≤q≤400,000
0≤p< the size of A
−1,000,000,000≤x≤1,000,000,000
1≤q≤400,000
0≤p< the size of A
−1,000,000,000≤x≤1,000,000,000
输出
For each randomAccess, print ap in a line.
样例输入
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
样例输出
2
1
3
4
1
题解
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> deque;
int q;
cin>>q;
char d,x;
int p;
for(int i = 0; i < q; ++i)
{
cin>>d;
switch(d)
{
case '0':
cin >> x;
cin>>p;
if(x == '0')deque.push_front(p);
else deque.push_back(p);
break;
case '1':
cin >> p;
cout<<deque[p]<<endl;
break;
case '2':
cin >> x;
if(x == '0')deque.pop_front();
else deque.pop_back();
break;
}
}
}