P4. 循环数组求和arr
给定一个长度为n 的数组 a。让ci表示i 的第 i′ 次循环移位 ∗ 的结果。她创建了一个新数组 b,使得 b=c1+c2+⋯+cn,其中 +代表连接text†。
然后,提出 q个查询。对于每个查询,输出从第l 个元素到第 r个元素(包括两端)的子数组 b 中所有元素的和。
数组 a的第 x次(1≤x≤n) 循环移位是 ax,ax+1…an,a1,a2…ax−1。注意,第1次移位是初始的 a。
两个长度为 n的数组 p和 q的连接(换句话说,p+q)是p1,p2,...,pn,q1,q2,...,qn。
第一行包含 t(1≤t≤100) — 测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 q(1≤n,q≤2⋅105)— 数组的长度和查询的数量。
接下来的行包含 n 个整数 a1,a2,...,an(1≤ai≤106)。
接下来的 q 行包含两个整数 l 和 r(1≤l≤r≤n2)— 查询的左边界和右边界。
注意,大输入可能需要使用 64 位整数。
保证 n 的总和不超过 2⋅105,并且 q 的总和不超过2⋅105。
对于第一个测试用例,b=[1,2,3,2,3,1,3,1,2]。
40%的数据,n,q≤1000;
100%的数据,n,q≤2×105,t(1≤t≤100)。