配点 : 400 点
問題文
長さ N の整数列 A=(A1,A2,…,AN) と正整数 K が与えられます。
各 i=1,2,…,Q について、A の連続部分列 (Ali,Ali+1,…,Ari) が良い数列かどうかを判定してください。
ここで、長さ n の数列 X=(X1,X2,…,Xn) は、下記の操作を好きな回数( 0 回でも良い)だけ行うことによって、X のすべての要素を 0 にすることができるとき、かつ、そのときに限り良い数列です。
1≤i≤n−K+1 を満たす整数 i および、整数 c (負の数でも良い)を選び、K 個の要素 Xi,Xi+1,…,Xi+K−1 のそれぞれに c を加算する。
なお、すべての i=1,2,…,Q について、ri−li+1≥K が保証されます。
制約
- 1≤N≤2×105
- 1≤K≤min{10,N}
- −109≤Ai≤109
- 1≤Q≤2×105
- 1≤li,ri≤N
- ri−li+1≥K
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
N K
A1 A2 … AN
Q
l1 r1
l2 r2
⋮
lQ rQ
出力
Q 行出力せよ。
i=1,2,…,Q について、i 行目には数列 (Ali,Ali+1,…,Ari) が良い数列である場合は 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)$ は良い数列です。
実際、下記の手順で操作を行うことで、すべての要素を 0 にすることができます。
- まず、i=2,c=4 として操作を行う。その結果、X=(3,3,5,2,2,0) となる。
- 次に、i=3,c=−2 として操作を行う。その結果、X=(3,3,3,0,0,0) となる。
- 最後に、i=1,c=−3 として操作を行う。その結果、X=(0,0,0,0,0,0) となる。
よって、1 行目には Yes
を出力します。
一方、数列 $(A_2, A_3, A_4, A_5, A_6, A_7) = (-1, 1, -2, 2, 0, 5)$ は、
どのような手順で操作を行ってもすべての要素を 0 にすることはできないため、良い数列ではありません。
よって、2 行目には 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