このシリーズではE869120さんによって作成された競プロ典型90問をPythonで解いています。
問題
ポイント
Ti = 2 のクエリが曲者です。このクエリのたび素直にリストの並び替えを行うとTLEとなってしまいます。
そこで、これまでTi = 2 が何回来たか(何回数列を右にずらしたか)を変数で記録しておき、
Ti = 3のクエリのときにこの変数を利用して値を出力します。
コード
def main():
import sys
sys.setrecursionlimit(10 ** 9)
input = sys.stdin.readline
N, Q = map(int, input().split(" "))
a = list(map(int, input().split(" ")))
r_cnt = 0 # Ti = 2 が何回来たか(何回数列を右にずらしたか)のカウント
for _ in range(Q):
T, x, y = map(int, input().split(" "))
x, y = x - r_cnt, y - r_cnt
if T == 1:
a[x - 1], a[y - 1] = a[y - 1], a[x - 1]
elif T == 2:
r_cnt += 1
if r_cnt == len(a):
r_cnt = 0
elif T == 3:
print(a[x - 1])
if __name__ == '__main__':
main()