定义冒泡排序的过程为:
对于一个长为 n 的序列 a1,…,an,进行 n−1 轮“冒泡”操作,每次“冒泡”操作中进行以下操作:
- 如果 a1>a2 则交换 a1,a2。
- 如果 a2>a3 则交换 a2,a3。
- …
- 如果 an−1>an 则交换 an−1,an。
进行一轮“冒泡”操作的伪代码如下:
for i = 1 to n-1:
if a[i] > a[i + 1]:
swap(a[i], a[i + 1])
给定一个数组 b1,b2,…,bn。
每次询问 (l,r,k,x,y),小 C 截取了 b 数组的子区间 [l,r],得到一个新的 a 数组 [a1,…,ar−l+1]=[bl,…,br],并对 a 数组进行了 k 次“冒泡”操作。
你需要求出在 k 次“冒泡”操作后,∑yi=xai 的值。
输入格式
第一行一个整数 id 表示子任务编号。特别的,对于样例输入 1,有 id=0。
第二行两个整数 n,q。
接下来一行 n 个整数 b1,…,bn。
接下来 q 行每行 5 个整数 l,r,k,x,y。
输出格式
输出 q 行,每行一个整数表示答案。
输入输出样例
样例输入 1
0 4 2 1 3 4 2 2 4 1 2 2 1 4 2 3 4
样例输出 1
2 7
其余样例
下发文件中共有 8 个样例,分别来自 8 个子任务。
数据范围
对于所有数据:
- 1≤n≤106,1≤q≤5×105
- 0≤bi≤109,1≤l<r≤n,1≤k≤r−l,1≤x≤y≤r−l+1。
子任务编号 | n,q 范围 | 特殊性质 | 分值 |
---|---|---|---|
1 | n≤10,q≤5000 | 无 | 8 |
2 | n≤2×105,q≤5 | 无 | 14 |
3 | n,q≤2×105 | x=1,y=r−l+1−k | 10 |
4 | n,q≤2×105 | l=1,r=n | 12 |
5 | n,q≤2×105 | k≤10 | 14 |
6 | n,q≤2×105 | ai≤10 | 16 |
7 | n,q≤2×105 | 无 | 16 |
8 | n≤106,q≤5×105 | 无 | 10 |