아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Gleb Evstropov

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

요약
배열의 원소를 바꾸는 갱신이 섞여 있을 때, 구간 a[l:r)에서 k, k+1, ..., m이 부분수열로 나타나는 가장 큰 m을 구합니다.
난이도

어려움10점 중 9점

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

문제

배열 aa가 주어집니다.

두 종류의 쿼리를 처리하세요.

  1. xx와 yy가 주어집니다. a_xa\_x의 값을 yy로 바꿉니다.
  2. ll, rr, kk가 주어집니다. 수열 k,k+1,…,mk, k+1, \ldots, m이 a_l:ra\_{l:r}의 부분수열이 되도록 하는 가장 큰 mm의 값을 구하세요.

입력

첫 줄에는 두 정수 nn과 qq (1≤n,q≤1061 \leq n, q \leq 10^6)가 주어집니다. 각각 aa의 길이와 쿼리의 개수입니다.

둘째 줄에는 nn개의 정수 a_ia\_i (0≤a_i<n0 \leq a\_i < n)가 주어집니다. 이는 aa의 원소입니다.

이어서 qq개의 줄이 주어지며, 각 줄은 다음 중 하나의 형태입니다.

  • 1xy1 x y (0≤x,y<n0 \leq x, y < n): 첫 번째 종류의 쿼리입니다.
  • 2lrk2 l r k (0≤l<r≤n0 \leq l < r \leq n, 0≤k<n0 \leq k < n): 두 번째 종류의 쿼리입니다. 반열린 구간을 쓰므로 a_0:3a\_{0:3}은 인덱스 0, 1, 2의 원소를 포함합니다. 주어진 구간에는 kk와 같은 원소가 적어도 하나 있다고 보장됩니다.

출력

두 번째 종류의 각 쿼리에 대해 그에 해당하는 mm을 출력하세요.

예제1

  1. 예제 1

    입력
    6 17
    0 0 0 1 2 1
    2 0 4 0
    2 0 5 0
    1 3 2
    2 0 4 0
    2 0 6 0
    2 0 4 2
    2 5 6 1
    1 0 1
    2 1 6 1
    2 0 5 1
    1 0 0
    1 5 5
    1 2 2
    1 4 4
    1 3 3
    1 1 1
    2 0 6 0
    
    예상 출력
    1
    2
    0
    1
    2
    1
    1
    2
    5