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