문제 165
수열 편집과 구간 연산
길이가 $N$인 정수 수열 $A_1, A_2, \cdots, A_N$이 주어진다. 다음 $Q$개의 명령을 순서대로 처리해 보자. 원소의 위치는 $1$부터 시작하며, 삽입·삭제·이동 후에는 바뀐 수열을 기준으로 위치를 매긴다.
- $0\ p\ x$: $p$번째 원소 앞에 정수 $x$를 삽입한다. $p$가 수열의 길이보다 $1$ 크면 맨 뒤에 삽입한다.
- $1\ p$: $p$번째 원소를 삭제한다.
- $2\ l\ r\ x$: $A_l, A_{l+1}, \cdots, A_r$에 각각 $x$를 더한다.
- $3\ l\ r\ x$: $A_l, A_{l+1}, \cdots, A_r$를 모두 $x$로 바꾼다.
- $4\ l\ r$: $A_l, A_{l+1}, \cdots, A_r$의 순서를 뒤집는다.
- $5\ l\ r\ k$: 구간 $[l, r]$을 오른쪽으로 $k$칸 순환 이동한다. $k<0$이면 왼쪽으로 $-k$칸 순환 이동한다.
- $6\ l\ r$: $A_l + A_{l+1} + \cdots + A_r$을 구한다.
- $7\ l\ r$: $A_l, A_{l+1}, \cdots, A_r$의 최솟값을 구한다.
- $8\ l\ r$: $A_l, A_{l+1}, \cdots, A_r$의 최댓값을 구한다.
- $9\ l\ r$: $A_l, A_{l+1}, \cdots, A_r$의 최솟값이 나타나는 가장 작은 위치를 구한다.
- $10\ l\ r\ p$: 구간 $[l, r]$을 잘라 낸 뒤, 남은 수열의 $p$번째 원소 앞에 순서를 유지하여 삽입한다. $p$가 남은 수열의 길이보다 $1$ 크면 맨 뒤에 삽입한다.
- $11\ p$: $p$번째 원소를 구한다.
입력
첫 번째 줄에 두 정수 $N$, $Q$가 공백으로 구분되어 주어진다. $(1 \le N, Q \le 200\,000)$
두 번째 줄에 $A_1, A_2, \cdots, A_N$이 공백으로 구분되어 주어진다. $(-10^6 \le A_i \le 10^6)$
세 번째 줄부터 $Q$개의 줄에 걸쳐 명령이 하나씩 주어진다. 각 명령의 정수는 공백으로 구분되어 주어진다.
$0$번, $2$번, $3$번 명령에는 정수 $x$가 주어진다. $(-10^6 \le x \le 10^6)$
$5$번 명령에는 정수 $k$가 주어진다. $(-10^9 \le k \le 10^9)$
각 명령에서 위치의 범위는 다음과 같다. $L$은 해당 명령을 처리하기 전 수열의 길이이다.
- $0$번 명령에 정수 $p$가 주어진다. $(1 \le p \le L+1)$
- $1$번, $11$번 명령에 정수 $p$가 주어진다. $(1 \le p \le L)$
- $2$번부터 $9$번 명령에 두 정수 $l$, $r$이 공백으로 구분되어 주어진다. $(1 \le l \le r \le L)$
- $10$번 명령에 세 정수 $l$, $r$, $p$가 공백으로 구분되어 주어진다. $(1 \le l \le r \le L; 1 \le p \le L-(r-l+1)+1)$
수열이 비어 있을 때는 $0$번 명령만 주어진다.
출력
$6$번, $7$번, $8$번, $9$번, $11$번 명령의 결과를 명령이 주어진 순서대로 한 줄에 하나씩 출력한다.
예제 입력 1
5 15 3 -1 4 -1 5 6 1 5 9 1 5 2 2 4 3 7 1 5 3 3 4 -2 8 1 5 4 1 5 11 1 5 1 5 -1 11 1 10 2 3 4 11 4 0 1 9 1 3 6 1 5
예제 출력 1
10 2 2 5 5 -2 -2 12