配列に関する計算量に関して頭に入れた上でコードを書かないと時間制限に引っかかります. こちらのサイトに計算量がまとめてあります.
# ITP2_1A
n = int(input())
A = []
for _ in range(n):
query = list(map(int,input().split(" ")))
# 末尾の要素の削除
if query[0] == 2:
A.pop()
# 末尾に挿入
elif query[0] == 0:
A.append(query[1])
# query[1]にアクセス
else:
print(A[query[1]])
# ITP2_1B
# リストだと時間が間に合わないので両端へのアクセスの速いdequeを用いる
from collections import deque
n = int(input())
A = deque()
for _ in range(n):
query = list(map(int,input().split(" ")))
# 要素の追加
if query[0] == 0:
# 先頭
if query[1] == 0:
A.appendleft(query[2])
# 末尾
else:
A.append(query[2])
# 要素にアクセス
elif query[0] == 1:
print(A[query[1]])
# 要素の削除
else:
# 先頭の要素を削除
if query[1] == 0:
A.popleft()
# 末尾の要素を削除
else:
A.pop()
# ITP2_1C 要素の追加がなるべく一番後ろになるようにしたい
from collections import deque
n = int(input())
A = deque() # カーソルの前
B = deque() # カーソルの後ろ カーソルはBの先頭
for _ in range(n):
query = list(map(int,input().split(" ")))
# 挿入
if query[0] == 0:
B.appendleft(query[1])
# カーソルの移動
elif query[0] == 1:
# カーソルが負ならAの後方をBの前方に追加
if query[1] < 0:
for _ in range(-query[1]):
B.appendleft(A.pop())
# カーソルが正ならBの前方をAの後方に追加
else:
for _ in range(query[1]):
A.append(B.popleft())
else:
B.popleft()
# リストの内容の列挙
for x in A:
print(x)
for x in B:
print(x)
# ITP2_1D
m, n = list(map(int,input().split(" ")))
A = [[] for _ in range(m)]
for _ in range(n):
query = list(map(int,input().split(" ")))
# 末尾に追加
if query[0] == 0:
A[query[1]].append(query[2])
# 表示
elif query[0] == 1:
print(*A[query[1]]) # スペース区切りでリストを出力する print(*x)
# 空にする
else:
A[query[1]] = []