JOI 夏季セミナーコンテスト 2020
コンテスト日時
2020/08/27 (Th) 21:00 - 22:30

E - ミーティング 2.0 (Meetings 2.0)

ผักชี
4
s
1024
MB
100

問題文

新 JOI 通りには $N$ 個のビルが左から右に一列に並んでいる.左から $i$ 番目のビル (以下,ビル $i$ と記す) の高さは $H_i$ キロメートルであり,隣り合うビルはちょうど $1$ キロメートル離れている.各ビルには $1$ 人の住人が屋上に住んでおり,全員秒速 $1$ キロメートル
で歩くことができる.

問題イメージの画像

この通りでは,今年は $Q$ 個の会議が開催される予定である.$i$ 個目の会議では,ビル $L_i,\ L_i+1\ ,\ ...\ ,\ R_i$ の住民が一つのビル $x\ (L_i ≤ x ≤ R_i)$ に集まらなければならない.会議をできるだけ迅速に進めるため,「集まる時間」が最短となるようなビル $x$ を選ぶことにした.
「集まる時間」は以下のように定義される.

「集まる時間」は会議の参加者のうち最も移動に時間を要する住人の移動時間である.
ただし,ビル $t$ の住人がビル $x$ に移動するときにかかる時間は,次式で表される.

$H_t +|t − x| + H_x$

ここでは,ビル $x$ の住人も移動しなければならないことに注意せよ.

各会議における,最短の「集まる時間」をそれぞれ求めよ.

制約

  • $1 ≤ T ≤ 3$
  • $2 ≤ N ≤ 200\ 000$
  • $1 ≤ Q ≤ 200\ 000$
  • $1 ≤ H_i ≤ 200\ 000$
  • $1 ≤ L_i ≤ R_i ≤ N$
  • 入力はすべて整数である.

この課題は,8 個の小課題から成る.
ただし,小課題 6 の制約,入力全体についての制約ではなく,各テストケースについての制約であることに注意せよ.

小課題 得点 内容 入力データ番号 $T$ の値
0 - サンプルテストケース #0 -
1 9 $N ≤ 300,\ Q ≤ 300$ #1 3
2 16 $N ≤ 2000,\ Q ≤ 2000$ #2 3
3 6 $N ≤ 100000,\ Q ≤ 100000,\ H_i ≤ 2$ #3 3
4 6 $N ≤ 100000,\ Q ≤ 100000,\ H_i ≤ 6$ #4 3
5 11 $N ≤ 100000,\ Q ≤ 100000,\ H_i ≤ 100$ #5 3
6 13 $N ≤ 100000,\ Q ≤ 100000$. $H_i$ には高々 $100$ 種類の値しかない. #6 3
7 34 $N ≤ 100000,\ Q ≤ 100000$ #7 3
8 5 追加の制約はない. #8 3

入力

各入力データ について,以下の形式で入力が与えられる.

$T$
(1 個目のテストケースの情報)
(2 個目のテストケースの情報)
...
($T$ 個目のテストケースの情報)

各テストケースについて,以下の形式で入力が与えられる.

  • 1 行目に,整数 $N, Q$ が空白区切りで与えられる.
  • 2 行目に,整数 $H_1, H_2, H_3, ... , H_N$ が空白区切りで与えられる.
  • $2 + i\ (1 ≤ i ≤ Q)$ 行目に,整数 $L_i,R_i$ が空白区切りで与えられる.

出力

出力

$T$ 行に渡って出力せよ.
$i$ 行目には,$i$ 個目のテストケースにおける答えを,以下の通りに出力せよ.

$ans_j$ を, $j$ 個目の会議における「集まる時間」の最小値とする.
そのとき, $ans_1, ans_2, ... , ans_Q$を空白区切りで出力せよ.
入力例 1
2 3 3 2 1 3 1 1 2 3 1 3 10 6 3 1 4 1 5 9 2 6 5 3 1 10 2 9 3 8 1 5 6 6 4 10
出力例 1
4 5 5 12 12 12 7 18 12
提出
C++23 (g++ 12.2.0)