수열과 쿼리 3

시간 제한1초메모리 제한512 MB

요약
정적 수열이 주어지고, 직전 정답과 XOR로 복호화한 질의마다 구간에서 k보다 큰 원소의 개수를 센다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 A1,A2,…,ANA_1, A_2, \dots, A_N이 주어진다. 다음 쿼리를 처리하는 프로그램을 작성한다.

  • i j k: Ai,Ai+1,…,AjA_i, A_{i+1}, \dots, A_j 중에서 kk보다 큰 원소의 개수를 출력한다.

입력

첫째 줄에 수열의 길이 NN (1≤N≤100 0001 \le N \le 100\,000)이 주어진다.

둘째 줄에 A1,A2,…,ANA_1, A_2, \dots, A_N이 공백으로 구분되어 주어진다. (1≤Ai≤1091 \le A_i \le 10^9)

셋째 줄에 쿼리의 개수 MM (1≤M≤100 0001 \le M \le 100\,000)이 주어진다.

넷째 줄부터 MM개의 줄에 세 정수 aa, bb, cc가 주어진다. 쿼리는 이 세 수를 다음과 같이 복호화해서 만든다.

  • i=a⊕Li = a \oplus L
  • j=b⊕Lj = b \oplus L
  • k=c⊕Lk = c \oplus L

⊕\oplus는 비트 단위 배타적 논리합(xor)이고, LL은 바로 앞 쿼리의 정답이다. 첫 쿼리에서는 L=0L = 0이다. 복호화한 값은 항상 1≤i≤j≤N1 \le i \le j \le N, 1≤k≤1091 \le k \le 10^9을 만족한다.

출력

각 쿼리의 정답을 한 줄에 하나씩 출력한다.

예제6

  1. 예제 1

    입력
    5
    5 1 2 3 4
    3
    2 4 1
    6 6 6
    1 5 2
    
    예상 출력
    2
    0
    3
    
  2. 예제 2

    입력
    1
    1
    1
    1 1 1
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1
    1000000000
    3
    1 1 1
    0 0 1000000001
    1 1 999999999
    
    예상 출력
    1
    0
    1
    
  4. 예제 4

    입력
    8
    7 7 7 7 7 7 7 7
    5
    1 8 6
    9 0 15
    3 5 6
    1 1 4
    1 8 8
    
    예상 출력
    8
    0
    3
    0
    0
    
  5. 예제 5

    입력
    10
    1 2 3 4 5 6 7 8 9 10
    7
    1 10 5
    7 2 6
    14 14 13
    0 0 0
    4 9 4
    4 15 15
    1 10 1
    
    예상 출력
    5
    4
    1
    0
    5
    0
    9
    
  6. 예제 6

    입력
    10
    10 9 8 7 6 5 4 3 2 1
    6
    1 10 5
    6 13 2
    0 4 11
    6 10 1
    1 1 2
    1 10 2
    
    예상 출력
    5
    1
    0
    4
    0
    8