atcoder#ABC156F. [ABC156F] Modularness

[ABC156F] Modularness

配点 : 600600

問題文

長さ kk の数列 d0,d1,...,dk1d_0,d_1,...,d_{k - 1} があります。

以下のクエリ qq 個を順に処理してください。

  • ii 番目のクエリは 33 つの整数 ni,xi,min_i,x_i,m_i からなる。 長さ nin_i の数列 a0,a1,...,ani1a_0,a_1,...,a_{n_i - 1} を、 [ \begin{aligned} a_j = \begin{cases} x_i & ( j = 0 ) \ a_{j - 1} + d_{(j - 1)~\textrm{mod}~k} & ( 0 < j \leq n_i - 1 ) \end{cases}\end{aligned} ] と定める。 $(a_j \sim \textrm{mod} \sim m_i) < (a_{j + 1} \sim \textrm{mod} \sim m_i)$ であるような、j(0j<ni1)j \sim (0 \leq j < n_i - 1) の個数を出力する。

ここで 22 つの整数 y,z(z>0)y, z \sim (z > 0) について、(ymodz)(y \sim \textrm{mod} \sim z)yyzz で割った余りを表します。

制約

  • 入力は全て整数である。
  • 1k,q50001 \leq k, q \leq 5000
  • 0di1090 \leq d_i \leq 10^9
  • 2ni1092 \leq n_i \leq 10^9
  • 0xi1090 \leq x_i \leq 10^9
  • 2mi1092 \leq m_i \leq 10^9

入力

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

kk qq

d0d_0 d1d_1 ...... dk1d_{k - 1}

n1n_1 x1x_1 m1m_1

n2n_2 x2x_2 m2m_2

::

nqn_q xqx_q mqm_q

出力

qq 行出力せよ。

ii 行目には、ii 番目のクエリに対する答えを出力せよ。

3 1
3 1 4
5 3 2
1

11 つ目のクエリについて、問題文で示した数列 {aja_j} は 3,6,7,11,143,6,7,11,14 になります。

  • $(a_0 \sim \textrm{mod} \sim 2) > (a_1 \sim \textrm{mod} \sim 2)$
  • $(a_1 \sim \textrm{mod} \sim 2) < (a_2 \sim \textrm{mod} \sim 2)$
  • $(a_2 \sim \textrm{mod} \sim 2) = (a_3 \sim \textrm{mod} \sim 2)$
  • $(a_3 \sim \textrm{mod} \sim 2) > (a_4 \sim \textrm{mod} \sim 2)$

であるため、このクエリに対する答えは 11 です。

7 3
27 18 28 18 28 46 1000000000
1000000000 1 7
1000000000 2 10
1000000000 3 12
224489796
214285714
559523809