【競プロ典型90問】「044 - Shift and Swapping(★3)」解法
Free-PhotosによるPixabayからの画像

このシリーズではE869120さんによって作成された競プロ典型90問をPythonで解いています。

問題

044 - Shift and Swapping(★3)

ポイント

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()

おすすめの記事