1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 平方分割メニュー(言語選択)
  4. 問題一覧 JavaScript編
  5. 区間の更新 JavaScript編

平方分割メニューのサムネイル
区間の更新 JavaScript編(paizaランク S 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

整数 N, K と、 長さ N の配列 A = [A_1, A_2, ..., A_N] および K 個のクエリ Q が与えられます。

クエリは 以下の 2 種類存在し、 1 行に 1 つ与えられます。
- 0 L R: range_maxクエリ。L 項目から R 項目までの中で最も大きい要素の値を出力する。
- 1 L R D: updateクエリ。L 項目から R 項目までの要素全てに D を加える。

入力される値

入力は以下のフォーマットで与えられます。



N K
A_1
A_2
.
.
.
A_N
Q_1
Q_2
.
.
.
Q_K

* 1 行目では、配列 A の要素数 N および、クエリの個数 K が与えられます。
* 続く N 行では、配列 A の要素が先頭から順に与えられます。
* 続く K 行では、いずれかのクエリが 1 行に 1 つ与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

各range_maxクエリについて、配列 A の L 番目から R 番目までの要素のうち最小であるものの値を 1 行に 1 つ出力してください。
出力の最後は改行し、余計な文字、空行を含んではいけません。

条件

* 2 ≦ N ≦ 10000
* 1 ≦ K ≦ 10000
* 1 ≦ L < R ≦ N
* -100000 ≦ A_i, D ≦ 100000
* 配列 A の要素は常に条件を満たすことが保証されます。
* 入力は合計で N + K + 1 行からなり、入力値最終行の末尾に改行が 1 つ入ります。

入力例1

15 3
70769
31957
-21562
15210
-24825
-79654
-78429
-26865
89690
64207
54997
96127
-91765
-71208
91107
0 8 9
1 6 9 -17335
0 6 12

出力例1

89690
96127

入力例2

30 5
-64138
72577
-5290
-14796
16951
55481
86827
-56960
-3805
44922
43011
96625
7569
62386
-15478
5251
-5349
-98136
-91424
-72635
75943
-8949
93173
37642
9727
-67640
99278
-75700
-23950
9349
1 3 16 -121
0 25 27
1 28 29 74423
1 4 14 -16524
0 14 25

出力例2

99278
93173

問題一覧へ戻る

ページの先頭へ戻る