만드는 중입니다

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

디마와 배열

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

요약
길이 n인 배열에서 구간 [l, r]의 MEX를 구하고, 한 원소의 값을 바꾸는 연산을 처리합니다.
난이도

어려움10점 중 8점

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

문제

디마는 정수 nn개로 이루어진 배열 aa를 가지고 있다. 생일 선물로 받은 것도, 직접 산 것도, 길에서 주운 것도 아니다. 원래부터 있었고 항상 있었다. 디마는 이 배열이 어디서 왔는지 별로 궁금해하지 않는다.

디마는 배열을 가지고 놀지 않고, Petya에게 주지 않으며, 잘게 자르지도 않고, 없애려고 하지도 않는다. 디마는 배열에 두 종류의 연산만 수행한다.

  • ? l r: 다중집합 {al,al+1,…,ar}\{a_l, a_{l+1}, \ldots, a_r\}의 MEX를 구한다.
  • ! i x: aia_i의 값을 xx로 바꾼다 (0≤x≤n)(0 \leq x \leq n).

다중집합 {a1,a2,…,ak}\{a_1, a_2, \ldots, a_k\}의 MEX는 모든 1≤i≤k1 \leq i \leq k에 대해 t≠ait \ne a_i를 만족하는 가장 작은 정수 t≥0t \ge 0이다.

입력

첫 줄에는 두 정수 nn과 qq (1≤n≤500 0001 \leq n \leq 500\,000, 1≤q≤250 0001 \leq q \leq 250\,000)가 주어진다. 각각 배열의 크기와 연산의 개수다.

둘째 줄에는 연산을 시작하기 전 배열의 원소 aia_i (0≤ai≤n0 \leq a_i \leq n) nn개가 주어진다.

다음 qq개 줄에는 위에서 설명한 형식의 연산이 한 줄에 하나씩 주어진다. 배열을 바꾸는 연산은 모두 합해 최대 50 00050\,000개라고 보장된다.

원소의 번호는 1부터 시작한다.

출력

첫 번째 종류의 연산마다 해당 다중집합의 MEX를 한 줄에 하나씩 출력한다. 답은 입력에 주어진 질의 순서대로 출력한다.

힌트

샘플에서 질의는 다음과 같다.

  • 처음 배열은 [4,1,0,2,2,3][4, 1, 0, 2, 2, 3]이다.
  • 첫 번째 질의는 {4,1,0,2,2,3}\{4, 1, 0, 2, 2, 3\}의 MEX를 구하며, 값은 55이다.
  • 두 번째 질의는 {2,2,3}\{2, 2, 3\}의 MEX를 구하며, 값은 00이다.
  • 세 번째 질의는 {1,0,2,2}\{1, 0, 2, 2\}의 MEX를 구하며, 값은 33이다.
  • 네 번째 질의는 {1,0,2,2,3}\{1, 0, 2, 2, 3\}의 MEX를 구하며, 값은 44이다.
  • 다섯 번째 연산은 배열을 바꾼다. 이제 배열은 [4,1,3,2,2,3][4, 1, 3, 2, 2, 3]이다.
  • 여섯 번째 질의는 전체 배열의 MEX를 구하며, 값은 00이다.
  • 일곱 번째 연산은 배열을 바꾼다. 이제 배열은 [4,1,3,0,2,3][4, 1, 3, 0, 2, 3]이다.
  • 여덟 번째 질의는 다시 전체 배열의 MEX를 구하며, 값은 55이다.

예제1

  1. 예제 1

    입력
    6 8
    4 1 0 2 2 3
    ? 1 6
    ? 4 6
    ? 2 5
    ? 2 6
    ! 3 3
    ? 1 6
    ! 4 0
    ? 1 6
    
    예상 출력
    5
    0
    3
    4
    0
    5