유일한 암호화 키

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

요약
최대 백만 개의 구간 질의마다 키 시퀀스에서 중복이 있는지 확인하고 있다면 가장 작은 중복 키를 출력하는 문제입니다.
난이도

보통10점 중 7점

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

문제

많은 암호(cipher)의 안전성은 키가 유일하며 절대 재사용되지 않는다는 사실에 크게 의존합니다. 동일한 키가 서로 다른 여러 메시지를 암호화하는 데 사용되면 비교적 강력한 암호라도 깨질 수 있으므로, 이 성질은 매우 중요합니다.

이 문제에서는 키의 반복(중복) 사용을 탐지합니다. 메시지를 암호화하는 데 사용된 키의 수열이 주어질 때, 지정된 구간 안에서 두 번 이상 사용된 키가 있는지 판별하는 것이 목표입니다.

입력

입력은 여러 개의 암호 설명(description)으로 이루어집니다. 각 설명은 공백으로 구분된 두 정수 MM과 QQ가 담긴 한 줄로 시작합니다. MM (1≤M≤1061 \le M \le 10^6)은 암호화된 메시지의 개수이고, QQ (0≤Q≤1060 \le Q \le 10^6)는 질의의 개수입니다.

이어지는 MM개의 줄에는 각각 하나의 정수 KiK_i (0≤Ki≤2300 \le K_i \le 2^{30})가 있으며, 이는 ii번째 메시지를 암호화하는 데 사용된 키의 식별자입니다. 그다음 QQ개의 줄에는 각각 하나의 질의가 있습니다. 각 질의는 두 정수 BjB_j와 EjE_j (1≤Bj≤Ej≤M1 \le B_j \le E_j \le M)로 주어지며, 확인하려는 메시지 구간을 나타냅니다.

각 설명 뒤에는 빈 줄이 하나 있습니다. 입력은 MM과 QQ 자리에 두 개의 0이 있는 줄로 종료됩니다.

출력

각 질의에 대해 한 줄을 출력합니다. BjB_j번째부터 EjE_j번째까지(양 끝 포함) 메시지를 암호화하는 데 사용된 키가 모두 서로 다르면 문자열 OK를 출력합니다. 그렇지 않다면, 그 구간 안에서 두 번 이상 등장하는 키 식별자 중 가장 작은 값을 출력합니다.

서로 다른 설명에 속한 답 사이에는 빈 줄을 하나 넣어 구분합니다.

예제3

  1. 예제 1

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

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

    입력
    6 1
    5
    3
    5
    3
    7
    7
    1 6
    
    0 0
    
    예상 출력
    3