luogu#P5009. [yLOI2018] 不老梦

    ID: 9033 远端评测题 2500ms 500MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2018线段树O2优化块状链表块状数组分块

[yLOI2018] 不老梦

题目背景

于万人中万幸得以相逢,刹那间澈净明通。
成为我所向披靡的勇气和惶恐,裂山海,堕苍穹。

——银临《不老梦》。

本题原名《毒瘤分块题》。

题目描述

扶苏非常喜欢一边听古风歌一边写毒瘤分块题。所以这个题的题面恶意卡了分块。

给你一个序列,这个序列中的每个数字有三个参数 vi,ai,biv_i,a_i,b_i。这个序列中的数有一个非常神奇的有关时间的性质:每过一个时刻,序列中第 ii 个数字的值 viv_i 会增加 ai×bia_i \times b_i

现在扶苏会对你做出一些询问和对序列进行一些修改。每次操作形如:

  • 查询第 tt 时刻区间 [l,r][l,r]vv 之和是多少。
  • 在第 tt 时刻修改区间 [l,r][l,r] 内的 aa,将之整体加上一个整数 xx
  • 在第 tt 时刻修改区间 [l,r][l,r] 内的 bb,将之整体加上一个整数 yy
  • 在第 tt 时刻修改区间 [l,r][l,r] 内的 vv,将之整体加上一个整数 zz

规定初始时刻为时刻 00

输入格式

每个测试点有且仅有一组测试数据。

输入的第一行是两个用空格隔开的整数,分别代表序列的长度 nn 以及操作的个数 mm

下面 nn 行,每行 33 个用空格隔开的整数,第 ii 行的整数 vi,ai,biv_i,a_i,b_i 分别代表第 ii 个位置的三个参数。

下面 mm 行,每行第一个数是 optopt,代表操作的种类。

  • 对于 opt=1opt = 1 的情况,代表对序列进行一次查询。 optopt 后有三个用空格隔开的整数 t,x,yt, x, y,代表查询时刻 tt 区间 [x,y][x,y]vv 的和。
  • 对于 opt=2opt = 2 的情况,代表对序列的 aa 值进行一次修改。optopt 后有四个用空格隔开的整数 t,x,y,zt, x, y, z,代表在第 tt 时刻将区间 [x,y][x,y]aa 的值加上 zz
  • 对于 opt=3opt = 3 的情况,代表对序列的 bb 值进行一次修改。optopt 后有四个用空格隔开的整数 t,x,y,zt, x, y, z,代表在第 tt 时刻将区间 [x,y][x,y]bb 的值加上 zz
  • 对于 opt=4opt = 4 的情况,代表对序列的 vv 值进行一次修改。optopt 后有四个用空格隔开的整数 t,x,y,zt, x, y, z,代表在第 tt 时刻将区间 [x,y][x,y]vv 的值加上 zz

数据保证参数 tt 是单调递增的,不存在同一时刻有超过一种查询或询问。

输出格式

对于每次查询操作,输出一个一行一个整数,代表查询的答案对 108+710^8 + 7 取模的答案。

5 5
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
2 1 1 3 2 
1 3 2 3
3 4 1 4 -3
4 5 1 3 -5
1 6 1 5
377
2708

提示

【样例输入输出 1 解释】

qwq


【数据规模与约定】

本题共有 1717 个测试点,各测试点不等分。每个测试点的 nn 的规模如下表

测试点编号 n=n= 测试点编号 n=n=
11 66 1010 105+210^5 + 2
22 1010 1111 1.5×105+21.5 \times 10^5 + 2
33 100100 1212 105+310^5 + 3
44 10310^3 1313 1.5×105+31.5 \times 10^5 + 3
55 3×1033 \times 10^3 1414 2×105+42 \times 10^5 + 4
66 1515 5×104+55 \times 10^4 + 5
77 104+110^4 + 1 1616 105+510^5 + 5
88 105+110^5 + 1 1717 2×105+52 \times 10^5 + 5
99 1.5×105+11.5 \times 10^5 + 1

各测试点分值

  • 对于第 11 到第 1414 个测试点,每个测试点 55 分。
  • 对于第 1515 到第 1717 个测试点,每个测试点 1010 分。

各测试点 mm 的取值

  • 对于测试点 11m=10m = 10
  • 对于测试点 22m=50m = 50
  • 对于第 33 到第 1717 个测试点,m=nm = n

各测试点特殊性质

  • 对于所有 nn 末位数字为 66 的测试点,满足性质:操作所用到的时刻从 11 开始,每次增加 11
  • 对于所有 nn 末位数字为 11 的测试点,满足性质:所有修改操作只涉及对 aa 的修改,且修改区间 x=yx = y
  • 对于所有 nn 末位数字为 22 的测试点,满足性质:所有修改操作只涉及对 aa 的修改。
  • 对于所有 nn 末位数字为 33 的测试点,满足性质:所有修改操作不涉及对 vv 的修改,且对于 bb 的修改满足 x=yx= y
  • 对于所有 nn 末位数字为 44 的测试点,满足性质:不存在修改操作。

对于全部的测试点,保证 1xyn1 \leq x \leq y \leq n1op41 \leq op \leq 4,给出的所有数字都在 32 位带符号整形的范围内,tt 为正数,且按照严格的升序给出。


【提示】

  • 请注意数据读入对程序效率造成的影响。
  • 请注意常数因子对程序效率造成的影响。
  • nn 的末位数字可以帮助你快速判断测试点的特殊性质。
  • 当你的答案为负时,请将其取模成非负数后再进行输出。