모든 수를 포함하는 최단 구간

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

요약
배열 원소를 점 업데이트하면서 1부터 K까지 모든 값을 포함한 가장 짧은 연속 구간 길이를 구합니다.
난이도

보통10점 중 7점

유형
세그먼트 트리, 슬라이딩 윈도우, 배열
정답자
아직 제출이 없습니다

문제

길이가 NN인 정수 배열이 있다. 각 원소는 11 이상 KK 이하의 정수다. 이 배열에 두 종류의 질의 MM개가 주어지고, 주어진 순서대로 처리한다.

첫 번째 종류는 배열의 한 자리 값을 다른 값으로 바꾼다. 두 번째 종류는 현재 배열에서 11부터 KK까지의 모든 정수를 한 번 이상 포함하는 가장 짧은 연속 부분 배열의 길이를 구한다.

질의를 순서대로 처리하고, 두 번째 종류의 답을 모두 출력하라.

입력

첫째 줄에 NN, KK, MM이 공백으로 구분되어 주어진다 (1≤N,M≤100 0001 \le N, M \le 100\,000, 1≤K≤501 \le K \le 50).

둘째 줄에 배열의 원소 NN개가 공백으로 구분되어 주어진다. 각 원소는 11 이상 KK 이하의 정수다.

이어지는 MM개의 줄에 질의가 한 줄에 하나씩 주어진다. 형식은 다음 둘 중 하나다.

  • 1 p v: pp번째 수를 vv로 바꾼다 (1≤p≤N1 \le p \le N, 1≤v≤K1 \le v \le K).
  • 2: 현재 배열에서 11부터 KK까지를 모두 포함하는 가장 짧은 연속 부분 배열의 길이를 묻는다.

출력

두 번째 종류의 질의마다 답을 한 줄에 하나씩 출력한다. 조건을 만족하는 연속 부분 배열이 없으면 -1을 출력한다.

예제2

  1. 예제 1

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

    입력
    6 3 6
    1 2 3 2 1 1
    2
    1 2 1
    2
    1 4 1
    1 6 2
    2
    
    예상 출력
    3
    3
    4