a_i = i인 배열에서 구간 뒤집기와 구간 회전, 구간 최솟값/최댓값/합, 위치의 값, 값의 위치를 묻는 질의를 최대 300000개 처리하고 최종 배열을 출력한다.
어려움9배열구현세그먼트 트리수학아직 제출이 없습니다시간 제한1초메모리 제한512 MB범수와 상수 형제는 배열을 가지고 논다. 형제가 가진 배열은 크기가 N인 A=[a1,…,aN]이고, 처음에는 모든 i(1≤i≤N)에 대해 ai=i이다. 형제는 질의 Q개를 받아 주어진 순서대로 하나씩 처리한다. 질의는 다음 네 종류 중 하나이다.
1 l r (1≤l≤r≤N): al부터 ar까지의 최솟값, 최댓값, 합을 구한다. 그리고 al부터 ar까지를 뒤집는다. 뒤집으면 배열은 다음과 같이 바뀐다.
[a1,…,al−1,ar,ar−1,…,al+1,al,ar+1,…,aN]
2 l r x (1≤l≤r≤N, −N<x<N): al부터 ar까지의 최솟값, 최댓값, 합을 구한다. 그리고 al부터 ar까지를 오른쪽으로 x칸 회전한다. x가 음수면 왼쪽으로 −x칸 회전한다. 0<x≤r−l이면 배열은 다음과 같이 바뀐다.
[a1,…,al−1,ar−x+1,…,ar−1,ar,al,al+1,…,ar−x,ar+1,…,aN]
회전은 구간 [l,r] 안에서만 일어난다. 구간의 한쪽 끝에서 밀려난 값은 반대쪽 끝으로 들어온다. 구간의 길이를 m=r−l+1이라 하면 오른쪽으로 x칸 회전하는 것은 오른쪽으로 x+m칸 회전하는 것과 같으므로, x가 음수이거나 ∣x∣≥m이어도 결과는 하나로 정해진다.
3 i (1≤i≤N): ai가 어떤 수인지 구한다.
4 x (1≤x≤N): ai=x인 i가 어떤 수인지 구한다.
질의 하나를 처리해 배열이 바뀌면 그 결과는 다음 질의에 그대로 영향을 준다. 질의마다 구한 값을 출력하고, 질의를 모두 처리한 뒤 배열의 마지막 모습을 출력하라.
첫 줄에 배열의 크기 N과 질의의 개수 Q가 공백으로 구분되어 주어진다. (1≤N≤300000, 1≤Q≤300000)
다음 Q개의 줄에 각 질의가 위 네 형식 중 하나로 주어진다.
질의마다 한 줄씩, 구한 값을 공백으로 구분해 출력한다. 1번 질의와 2번 질의는 최솟값, 최댓값, 합을 이 순서로 출력한다. 3번 질의와 4번 질의는 구한 값 하나를 출력한다.
마지막 Q+1번째 줄에는 질의를 모두 처리한 뒤 배열의 값을 공백으로 구분해 한 줄에 출력한다.
첫 번째 예제에서 배열은 다음 순서로 바뀐다.
[1,2,3,4,5]→[1,4,3,2,5]→[1,4,5,3,2]→[5,1,4,3,2]