atcoder#ABC288D. [ABC288D] Range Add Query

[ABC288D] Range Add Query

配点 : 400400

問題文

長さ NN の整数列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N) と正整数 KK が与えられます。

i=1,2,,Qi = 1, 2, \ldots, Q について、AA の連続部分列 (Ali,Ali+1,,Ari)(A_{l_i}, A_{l_i+1}, \ldots, A_{r_i})良い数列かどうかを判定してください。

ここで、長さ nn の数列 X=(X1,X2,,Xn)X = (X_1, X_2, \ldots, X_n) は、下記の操作を好きな回数( 00 回でも良い)だけ行うことによって、XX のすべての要素を 00 にすることができるとき、かつ、そのときに限り良い数列です。

1inK+11 \leq i \leq n-K+1 を満たす整数 ii および、整数 cc (負の数でも良い)を選び、KK 個の要素 Xi,Xi+1,,Xi+K1X_{i}, X_{i+1}, \ldots, X_{i+K-1} のそれぞれに cc を加算する。

なお、すべての i=1,2,,Qi = 1, 2, \ldots, Q について、rili+1Kr_i - l_i + 1 \geq K が保証されます。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1Kmin{10,N}1 \leq K \leq \min\lbrace 10, N \rbrace
  • 109Ai109-10^9 \leq A_i \leq 10^9
  • 1Q2×1051 \leq Q \leq 2 \times 10^5
  • 1li,riN1 \leq l_i, r_i \leq N
  • rili+1Kr_i-l_i+1 \geq K
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

NN KK

A1A_1 A2A_2 \ldots ANA_N

QQ

l1l_1 r1r_1

l2l_2 r2r_2

\vdots

lQl_Q rQr_Q

出力

QQ 行出力せよ。 i=1,2,,Qi = 1, 2, \ldots, Q について、ii 行目には数列 (Ali,Ali+1,,Ari)(A_{l_i}, A_{l_i+1}, \ldots, A_{r_i}) が良い数列である場合は Yes を、 そうでない場合は No を出力せよ。

7 3
3 -1 1 -2 2 0 5
2
1 6
2 7
Yes
No

数列 $X \coloneqq (A_1, A_2, A_3, A_4, A_5, A_6) = (3, -1, 1, -2, 2, 0)$ は良い数列です。 実際、下記の手順で操作を行うことで、すべての要素を 00 にすることができます。

  • まず、i=2,c=4i = 2, c = 4 として操作を行う。その結果、X=(3,3,5,2,2,0)X = (3, 3, 5, 2, 2, 0) となる。
  • 次に、i=3,c=2i = 3, c = -2 として操作を行う。その結果、X=(3,3,3,0,0,0)X = (3, 3, 3, 0, 0, 0) となる。
  • 最後に、i=1,c=3i = 1, c = -3 として操作を行う。その結果、X=(0,0,0,0,0,0)X = (0, 0, 0, 0, 0, 0) となる。

よって、11 行目には Yes を出力します。

一方、数列 $(A_2, A_3, A_4, A_5, A_6, A_7) = (-1, 1, -2, 2, 0, 5)$ は、 どのような手順で操作を行ってもすべての要素を 00 にすることはできないため、良い数列ではありません。 よって、22 行目には No を出力します。

20 4
-19 -66 -99 16 18 33 32 28 26 11 12 0 -16 4 21 21 37 17 55 -19
5
13 16
4 11
3 12
13 18
4 10
No
Yes
No
Yes
No