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

平方分割メニューのサムネイル
区間の最大値-上級 Scala編(paizaランク A 相当)

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

問題

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

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

1 つのクエリにつき、整数 L, R が与えられます。

各クエリについて、配列 A の L 番目から R 番目までの要素のうち最大であるものの値を出力してください。

入力される値

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



N K
A_1
A_2
.
.
.
A_N
L_1 R_1
L_2 R_2
L_3 R_3
.
.
.
L_K R_K

* 1 行目では、配列 A の要素数 N および、クエリの個数 K が与えられます。
* 続く N 行では、配列 A の要素が先頭から順に与えられます。
* 続く K 行では、クエリとして L_i, R_i がこの順に空白区切りで 1 行に 1 組与えられます。


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

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

条件

* 2 ≦ N ≦ 10000
* 1 ≦ K ≦ 100000
* 1 ≦ L_i < R_i ≦ N
* -100000 ≦ A_i ≦ 100000
* 入力は合計で N + K + 1 行からなり、入力値最終行の末尾に改行が 1 つ入ります。

入力例1

10 3
92273
38271
13195
30693
73139
-48198
91078
-4018
-97168
89133
5 6
8 10
4 7

出力例1

73139
89133
91078

入力例2

30 5
84171
215
-91380
81482
35058
-52380
-3996
6591
-92403
-81730
25151
-39344
-95636
19102
42841
-44378
-13010
-31349
72411
-11273
59892
-81728
-66793
-10558
27923
68330
71060
-76391
-53586
82817
8 9
19 23
3 20
27 30
26 30

出力例2

6591
72411
81482
82817
82817

問題一覧へ戻る

ページの先頭へ戻る