範囲最大値クエリ (Range Maximum Queries)

n 個の要素からなる配列と、q 個のクエリが与えられます。クエリには以下の2種類があります。
  1. 指定した範囲内での最大値を取得するクエリ
  1. 配列の特定の位置を更新するクエリ
これらのクエリを効率的に処理するのが、あなたの課題です。

入力

最初の行には、配列の要素数 n と、クエリの数 q (1 ≤ n, q ≤ 100000) が与えられます。
続く行では、n 個の整数 ($1 ≤ a_i ≤ 10^9$) が空白区切りで与えられ、これは配列の初期状態を表します。
その後の q 行には、それぞれクエリが1つずつ書かれています。
  1. 範囲最大値クエリの場合: 行の先頭が 1 で、続けて2つの整数 ($1 ≤ li ≤ ri ≤ n$) が指定されます。この場合、[] の範囲における最大値を求めます。
  1. 配列更新クエリの場合: 行の先頭が 2 で、続けて2つの整数 ($1 ≤ pi ≤ n, 1 ≤ xi ≤ 10^9$) が指定されます。この場合、配列の 番目の要素を新しい値 に更新します。

出力

範囲最大値クエリについては、各クエリごとに、その範囲での最大値を1行ずつ出力してください。

入力
出力
6 4 1 4 2 7 5 3 1 1 3 2 2 9 1 2 5 1 3 6
4 9 7
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue