Дима и массив

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

요약
배열에서 점 갱신과 구간 MEX 질의를 처리한다. 갱신은 최대 50,000번이다.
난이도

어려움10점 중 8점

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

문제

Диме не дарили массив aa, состоящий из nn целых чисел на день рождения, он не покупал его, не находил на улице, а он у него просто есть и всегда был, и Диме не очень-то и интересно откуда.

Дима не играет с массивом, не дарит его Пете, не режет на кусочки и не стремится его уничтожить. Дима просто выполняет операции двух видов со своим массивом:

  • ? l r --- узнать MEX мультимножества a_l,a_l+1,…,a_r\\{a\_l, a\_{l+1}, \ldots, a\_r\\}
  • ! i x --- присвоить a_ia\_i значение xx (0≤x≤n)(0 \leq x \leq n)

MEX мультимножества чисел a_1,a_2,…,a_k\\{a\_1, a\_2, \ldots, a\_k\\} --- это минимальное целое t≥0t \ge 0 такое, что t≠a_it \ne a\_i для всех 1≤i≤k1 \leq i \leq k.

На самом деле, Диме не очень нравится выполнять операции двух видов со своим массивом. Диму волнуют лишь результаты операций первого типа. Помогите Диме и напишите программу, которая выполнит операции за него.

입력

Первая строка содержит два целых числа nn и qq (1≤n≤500,000,1≤q≤250,0001 \leq n \leq 500\\,000, 1 \leq q \leq 250\\,000) --- размер массива, который есть у Димы и количество операций, соответственно.

Вторая строка содержит nn целых чисел a_ia\_i (0≤a_i≤n0 \leq a\_i \leq n) --- массив Димы до начала операций.

Каждая из следующих qq строк содержит описание одной операции в формате, описанном выше.

Гарантируется, что суммарно Дима сделал не более 50,00050\\,000 операций изменения массива.

Элементы массива пронумерованы, начиная с 11.

출력

Для каждой операцияя первого типа выведите одно целое число --- MEX соответствующего мультимножества. Ответы на запросы выводите в порядке, в котором они заданы во входных данных.

힌트

В примере запросы выглядят следующим образом:

  • Изначально массив равен \[4,1,0,2,2,3]\[4, 1, 0, 2, 2, 3]
  • В первом запросе считается MEX от 4,1,0,2,2,3\\{4, 1, 0, 2, 2, 3\\} и он равен 55.
  • Во втором запросе считается MEX от 2,2,3\\{2, 2, 3\\} и он равен 00.
  • В третьем запросе считается MEX от 1,0,2,2\\{1, 0, 2, 2\\} и он равен 33.
  • В четвёртом запросе считается MEX от 1,0,2,2,3\\{1, 0, 2, 2, 3\\} и он равен 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