배열

a_i = i인 배열에서 구간 뒤집기와 구간 회전, 구간 최솟값/최댓값/합, 위치의 값, 값의 위치를 묻는 질의를 최대 300000개 처리하고 최종 배열을 출력한다.

어려움9배열구현세그먼트 트리수학아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

범수와 상수 형제는 배열을 가지고 논다. 형제가 가진 배열은 크기가 NNA=[a1,,aN]A = [a_1, \ldots, a_N]이고, 처음에는 모든 ii(1iN1 \le i \le N)에 대해 ai=ia_i = i이다. 형제는 질의 QQ개를 받아 주어진 순서대로 하나씩 처리한다. 질의는 다음 네 종류 중 하나이다.

1 l r (1lrN1 \le l \le r \le N): ala_l부터 ara_r까지의 최솟값, 최댓값, 합을 구한다. 그리고 ala_l부터 ara_r까지를 뒤집는다. 뒤집으면 배열은 다음과 같이 바뀐다.

[a1,,al1,ar,ar1,,al+1,al,ar+1,,aN][a_1, \ldots, a_{l-1}, a_r, a_{r-1}, \ldots, a_{l+1}, a_l, a_{r+1}, \ldots, a_N]

2 l r x (1lrN1 \le l \le r \le N, N<x<N-N < x < N): ala_l부터 ara_r까지의 최솟값, 최댓값, 합을 구한다. 그리고 ala_l부터 ara_r까지를 오른쪽으로 xx칸 회전한다. xx가 음수면 왼쪽으로 x-x칸 회전한다. 0<xrl0 < x \le r - l이면 배열은 다음과 같이 바뀐다.

[a1,,al1,arx+1,,ar1,ar,al,al+1,,arx,ar+1,,aN][a_1, \ldots, a_{l-1}, a_{r-x+1}, \ldots, a_{r-1}, a_r, a_l, a_{l+1}, \ldots, a_{r-x}, a_{r+1}, \ldots, a_N]

회전은 구간 [l,r][l, r] 안에서만 일어난다. 구간의 한쪽 끝에서 밀려난 값은 반대쪽 끝으로 들어온다. 구간의 길이를 m=rl+1m = r - l + 1이라 하면 오른쪽으로 xx칸 회전하는 것은 오른쪽으로 x+mx + m칸 회전하는 것과 같으므로, xx가 음수이거나 xm|x| \ge m이어도 결과는 하나로 정해진다.

3 i (1iN1 \le i \le N): aia_i가 어떤 수인지 구한다.

4 x (1xN1 \le x \le N): ai=xa_i = xii가 어떤 수인지 구한다.

질의 하나를 처리해 배열이 바뀌면 그 결과는 다음 질의에 그대로 영향을 준다. 질의마다 구한 값을 출력하고, 질의를 모두 처리한 뒤 배열의 마지막 모습을 출력하라.

입력

첫 줄에 배열의 크기 NN과 질의의 개수 QQ가 공백으로 구분되어 주어진다. (1N3000001 \le N \le 300000, 1Q3000001 \le Q \le 300000)

다음 QQ개의 줄에 각 질의가 위 네 형식 중 하나로 주어진다.

출력

질의마다 한 줄씩, 구한 값을 공백으로 구분해 출력한다. 1번 질의와 2번 질의는 최솟값, 최댓값, 합을 이 순서로 출력한다. 3번 질의와 4번 질의는 구한 값 하나를 출력한다.

마지막 Q+1Q+1번째 줄에는 질의를 모두 처리한 뒤 배열의 값을 공백으로 구분해 한 줄에 출력한다.

힌트

첫 번째 예제에서 배열은 다음 순서로 바뀐다.

[1,2,3,4,5][1,4,3,2,5][1,4,5,3,2][5,1,4,3,2][1, 2, 3, 4, 5] \to [1, 4, 3, 2, 5] \to [1, 4, 5, 3, 2] \to [5, 1, 4, 3, 2]