만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

구간 인버전 개수

시간 제한4초메모리 제한1024 MB

요약
순열의 구간마다 역순쌍의 개수를 구합니다. 각 질의의 경계는 이전 답에 따라 바뀝니다.
난이도

보통10점 중 7점

유형
배열, 세그먼트 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

오스타프는 의자 안에 숨겨진 다이아몬드에 이제 놀라지 않는다. 이번에도 그는 놀라지 않았다. 그의 앞에는 의자 nn개가 놓여 있다. 의자 ii에는 aia_i개의 다이아몬드가 숨겨져 있으며, 모든 aia_i는 서로 다르고 1 이상 nn 이하이다.

오스타프가 관심을 두는 것은 다이아몬드가 아니라 인버전의 개수다. i<ji < j이고 ai>aja_i > a_j인 쌍 (i,j)(i, j)를 인버전이라고 한다. 전체 의자에서 인버전을 세는 일은 그에게 쉬웠다. 이제 연속한 의자 구간마다 인버전 개수를 빠르게 세야 한다. 오스타프는 이를 해냈다. 당신은 할 수 있겠는가?

입력

첫 줄에 의자의 개수 nn (1≤n≤300001 \le n \le 30000)이 주어진다. 둘째 줄에는 공백으로 구분된 정수 nn개 aia_i (1≤ai≤n1 \le a_i \le n)가 주어진다. 모든 값은 서로 다르다.

다음 줄에는 질의의 개수 qq (1≤q≤1000001 \le q \le 100000)가 주어진다. 이어서 qq개의 줄에 질의 ii의 경계를 만드는 데 쓰이는 두 정수 xix_i와 yiy_i (1≤xi,yi≤n1 \le x_i, y_i \le n)가 주어진다. 경계는 (xi+Ansi−1−1) mod n+1(x_i + Ans_{i-1} - 1) \bmod n + 1과 (yi+Ansi−1−1) mod n+1(y_i + Ans_{i-1} - 1) \bmod n + 1이다. 여기서 Ansi−1Ans_{i-1}은 바로 전 질의의 답이고, ii가 1이면 0이다. 두 값 중 작은 값이 구간의 왼쪽 끝, 큰 값이 오른쪽 끝이 된다. a mod ba \bmod b는 aa를 bb로 나눈 나머지다.

출력

질의 ii마다 ii번째 줄에 ii번째 구간의 인버전 개수를 정수 하나로 출력한다.

힌트

실제 질의의 경계는 다음과 같다.

  1. 1 5
  2. 3 8
  3. 2 4
  4. 2 7
  5. 6 8
  6. 1 8

예제1

  1. 예제 1

    입력
    8
    1 4 6 2 3 8 7 5
    6
    1 5
    7 4
    4 6
    8 5
    1 3
    6 5
    
    예상 출력
    4
    6
    2
    5
    3
    8