#P956. 倍数子序列

倍数子序列

题目描述

给定一个长度为 nn 的序列 a1,a2,...,ana_1,a_2,...,a_n ,及 qq 组询问,每组询问包含两个正整数 Li,RiL_i,R_i,请你对于每组询问,求出在给定区间 aLi,...,aRia_{L_i},...,a_{R_i} 之间,有多少个子序列的和为 mm 的倍数。(子序列允许为空;由于答案可能过大,输出答案对109+710^9+7取模即可)

输入格式

输入第一行,三个正整数 n,m,qn,m,q 输入第二行,nn 个正整数 a1,...,ana_1,...,a_n 接下来 qq 行,每行两个正整数,其中第 i+2i+2 行的正整数分别表示第 ii 次询问的 Li,RiL_i,R_i

输出格式

输出共 qq 行,每行一个整数表示答案。

4 3 3
7 0 8 6
1 2
1 3
2 4
2
4
4

样例解释 1

对于第1个询问,有2个子序列满足要求:{} {0} 对于第2个询问,有4个子序列满足要求:{} {0} {7,8} {7,0,8} 对于第3个询问,有2个子序列满足要求:{} {0} {6} {0,6}

数据范围

  • 对于 30%30\% 的数据,1n,q101\leq n,q \leq 101m51 \leq m \leq 5
  • 对于 60%60\% 的数据,1n,q1031\leq n,q \leq 10^31m101 \leq m \leq 10
  • 对于 100%100\% 的数据,1n,q1051\leq n,q \leq 10^51LiRin1 \leq L_i \leq R_i \leq n0ai1090 \leq a_i \leq 10^91m201 \leq m \leq 20