G. [R48G]子集求和

    Type: Default 1500ms 512MiB

[R48G]子集求和

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

时空限制

1.5S/512M

题目描述

对于 SS 的任意一个子集 SiSS_i \subseteq S,定义 f(Si)f(S_i) 为: SiS_i 中所有满足“SiS_i 中出现次数为奇数”的元素之和。

例如:Si={2,2,3,5,5,5}S_i = \{2, 2, 3, 5, 5, 5\},其中 22 出现了 22 次,33 出现了 11 次,55 出现了 33 次。则 f(Si)=3+5=8f(S_i) = 3 + 5 = 8

给定一个长度为 nn 的数组 aa。对于数组的任意一个子区间构成的可重集合 SS,我们定义函数 G(S)G(S)SS 所有子集 SiS_if(Si)f(S_i) 的平方之和对 109+710^9+7 取模的结果:

$$G(S) = \big( \sum_{S_i \subseteq S} (f(S_i))^2 \big) \bmod{10^9+7} $$

现在有 mm 次询问,每次给定一个区间 [l,r][l, r],请你求出该区间构成的可重集合 SSG(S)G(S) 值。

格式

输入格式

第一行包含两个整数 n,mn, m,分别表示数组长度和询问次数。

第二行包含 nn 个整数,表示数组 aa 的元素。

接下来 mm 行,每行包含两个整数 l,rl, r,表示询问的区间。

输出格式

对于每个询问,输出一个整数表示 G(S)mod109+7G(S) \bmod{10^9+7}

样例

样例输入 #1

3 2
2 2 3
1 2
1 3

样例输出 #1

8
76

样例解释 #1

  • 对于询问 [1,2][1, 2]S={2,2}S = \{2, 2\}。子集有 ,{a1},{a2},{a1,a2}\emptyset, \{a_1\}, \{a_2\}, \{a_1, a_2\}ff 值分别为 0,2,2,00, 2, 2, 0。平方和 G(S)=02+22+22+02=8G(S) = 0^2+2^2+2^2+0^2 = 8

数据规模

对于 30%30\% 的数据,1n101 \leq n \leq 101m101 \leq m \leq 10

对于 100%100\% 的数据,1n,m5×1051 \le n, m \le 5 \times 10^51ai1091 \le a_i \le 10^91lrn1 \le l \le r \le n

代码源挑战赛 Round 48

Not Attended
Status
Done
Rule
DMY
Start at
2026-1-30 20:00
End at
2026-1-30 21:30
Duration
1.5 hour(s)
Host
Partic.
333