구간에 있는 서로 다른 수의 개수

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

요약
고정된 배열에서 여러 구간 쿼리가 주어질 때 각 부분 배열에 등장하는 서로 다른 값의 개수를 구한다.
난이도

보통10점 중 7점

유형
배열, 정렬, 누적 합, 이분 탐색
정답자
아직 제출이 없습니다

문제

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

  • i j: Ai,Ai+1,…,AjA_i, A_{i+1}, \dots, A_j에 나타나는 서로 다른 수의 개수를 구한다.

같은 값이 구간 안에 여러 번 나오더라도 한 번만 센다.

입력

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

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

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

넷째 줄부터 MM개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다. 각 줄에는 두 정수 ii와 jj가 있다. (1≤i≤j≤N1 \le i \le j \le N)

출력

각 쿼리마다 구간 [i,j][i, j]에 있는 서로 다른 수의 개수를 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다.

예제2

  1. 예제 1

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

    입력
    1
    1000000
    1
    1 1
    
    예상 출력
    1