题目描述
Paimon 刚刚学会了可持久化线段树,决定立刻练习一下。于是,Lumine 给了她一个简单的练习题:
给定一个长度为 n 的序列 a1,a2,⋯,an, Lumine 会对这个序列进行 m 次修改。在第 i 次修改中,给出三个整数 li,ri,xi (1≤li≤ri≤n),Lumine 会将所有满足 li≤k≤ri 的元素 ak 修改为 (ak+xi)。
定义 ai,t 为第 t 次操作之后的 ai 的值。这样我们就能记录下每个 ai 在历史上的所有版本。
注意,如果 ai 在第 t 次修改中没有被修改,则有 ai,t=ai,t−1。为方便起见,我们也定义 ai,0 为 ai 的初始值。
在所有修改完成后,荧会给派蒙 q 个询问,询问关于这些历史值的平方和。
第 k 个询问由四个整数 lk,rk,xk,yk 表示,要求派蒙计算:
i=lk∑rkj=xk∑ykai,j2
请帮助 Paimon 计算所有询问的结果。由于答案可能非常大,请将结果对 109+7 取模后输出。
输入格式
每个测试文件中只有一组数据。
第一行包含三个整数 n,m,q (1≤n,m,q≤5×104) 分别表示序列的长度、修改次数和询问次数。
第二行包含 n 个整数 a1,a2,⋯,an (∣ai∣<109+7) 表示序列的初始值。
接下来 m 行中,第 i 行包含三个整数 li,ri,xi (1≤li≤ri≤n,∣xi∣<109+7)
表示第 i 次修改。
接下来 q 行中,第 i 行包含四个整数 li,ri,xi,yi (1≤li≤ri≤n,0≤xi≤yi≤m) 表示第 i 次询问。
输出格式
对于每个询问,输出一行,一个整数,表示答案对 109+7 取模的结果。
3 1 1
8 1 6
2 3 2
2 2 0 0
1
4 3 3
2 3 2 2
1 1 6
1 3 3
1 3 6
2 2 2 3
1 4 1 3
4 4 2 3
180
825
8