luogu#P4458. [BJOI2018] 链上二次求和

    ID: 8485 远端评测题 4000ms 512MiB 尝试: 5 已通过: 3 难度: 7 上传者: 标签>2018线段树各省省选北京O2优化枚举暴力二维线段树前缀和差分

[BJOI2018] 链上二次求和

题目描述

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

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

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

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

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

输入格式

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

第二行包含 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,故第1次询问输出 55

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

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

数据范围:

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

对于全部数据, 保证 n200000n \leq 200000m500000m \leq 500000m100000 m^\prime \leq 1000000ai<1000000007 0 \leq a_i < 1000000007

1un1 \leq u \leq n1vn 1\leq v \leq n0d<1000000007 0 \leq d < 1000000007lrnl \leq r \leq n

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

pic