#P50637. 「BJOI2018」链上二次求和

「BJOI2018」链上二次求和

题目描述

有一条长度为 nn 的链( 1i<n\forall 1 \leq i < n ,点 ii 与点 i+1i+1 之间有一条边的无向图), 每个点有一个整数权值,第 ii 个点的权值是 aia_i 。现在有 mm 个操作,每个操作如下:

操作 1(修改):给定链上两个节点 uuvv 和一个整数 dd,表示将链上 uuvv 唯一的简单路径上每个点权值都加上 dd

操作 2(询问):给定两个正整数 llrr,表示求链上所有节点个数大于等于 ll 且小于等于 rr 的简单路径节点权值和之和。由于答案很大,只用输出对质数 10000000071000000007 取模的结果即可。

一条节点个数为 kk 的简单路径节点权值和为这条上所有 kk 个节点(包括端点)的权值之和,而本题中要求是对所有满足要求的简单路径,求这一权值和的和。

由于是无向图,路径也是无向的,即点 11 到点 22 的路径与点 22 到点 11 的路径是同一条,不要重复计算。

输入格式

输入第一行包含两个正整数 nnmm,分别表示节点个数和操作次数。

第二行包含 nn个整数,其中第 ii 个数 aia_i 为第 ii 个点的初始权值。

接下来 mm行,每行为 1 u v d2 l r的形式,分别表示进行一次操作 1(修改)或操作 2(询问)。

输出格式

对于每次询问,输出一行一个整数,表示答案对 10000000071000000007 取模的余数。

样例

5 5
1 1 1 1 1
2 5 5
2 1 2
1 1 2 2
2 1 1
1 1 5 3
5
13
9

节点个数为 55 的简单路径只有 11 条,权值和为 55,故第一次询问输出 55

节点个数为 11 的简单路径有 55 条,每条权值和都是 11;节点个数为 22 的简单路径有 44 条,每条权值和都是 22,故第二次询问输出 1313

在将点 11 和点 22 的权值加 22 后,55条节点个数为 11 的简单路径权值和分别 为 3333111111,故第三次询问输出 99

数据范围与提示

记操作 1(修改)的次数为 mm^\prime

对于全部数据, 保证 n200000,m500000,m100000,0ai<1000000007n \leq 200000, m \leq 500000, m^\prime \leq 100000, 0 \leq a_i < 1000000007

1un,1vn,0d<1000000007,lrn1 \leq u \leq n, 1\leq v \leq n, 0 \leq d < 1000000007, l \leq r \leq n

对于每个数据点的详细规模与约定见下表。

测试点 nn\le mm\le mm'\le 约束
1 5050
2
3 300300
4
5 50005000 50005000 50005000
6 5×1055\times 10^5
7
8 10510^5
9 2×1052\times 10^5 11 00 保证 l=1,r=nl=1,r=n
10 5×1055\times 10^5
11 10510^5 保证 u=vu=v
12 保证 l=1,r=nl=1,r=n
13 保证 u=1,v=n,ai=0u=1,v=n,a_i=0
14 保证 u=1,v=nu=1,v=n
15 保证 d=1,ai=0d=1,a_i=0
16 保证 d=1d=1
17 保证 ai=0a_i=0
18
19
20