T248554 Game11:区间等差序列覆盖问题

题目描述

你需要维护一个序列 $A$ ,初始时全为 $0$,支持: - `1 l r a d` 将 $A[l,r]$ 赋值为首项为 $a$,公差为 $d$ 的等差序列 - `2 l r a d` 求 $a \times \sum\limits_{i=l}^{r}{A_i} \pmod{d}$

输入格式

第一行为两个整数 $n,m$。 接下来 $m$ 行,每行一个操作。

输出格式

对于每一个 $2$ 操作,输出一个数,表示答案。

说明/提示

$1 \le l\le r \le n$ | 子任务 | 数据规模 | | :----------: | :----------: | | $\text{Subtask 0(20pts)}$ | $1 \le n,m \le 10,1 \le s,d \le 10^{3}$| | $\text{Subtask 1(20pts)}$ | $1 \le n,s,d,m \le 100000$ | | $\text{Subtask 2(50pts)}$ | 与 $\text{Subtask 1}$ 数据规模相同,但是保证都是 `1` 操作 | | $\text{Subtask 3(10pts)}$ | 与 $\text{Subtask 1}$ 数据规模相同,但是保证都是 `2` 操作且 $l \le \frac{n}{2} \lt r$ | **请注意,每一个子任务只有通过所有测试点才能够拿分!** 造数据程序: ```python from cyaron import * for i in range(1, 10+1): test = IO(file_prefix="data/test", data_id=i) n = randint(1, 10) m = randint(1, 10) test.input_writeln(n, m) for j in range(m): l = randint(1, n) r = randint(1, n) if l > r: l, r = r, l test.input_writeln(randint(1, 2), l, r, randint( 1, 1000), randint(1, 1000)) test.output_gen("未命名1.exe") print(i) for i in range(11, 20): test = IO(file_prefix="data/test", data_id=i) n = randint(1, 100000) m = randint(1, 100000) test.input_writeln(n, m) for j in range(m): l = randint(1, n) r = randint(1, n) if l > r: l, r = r, l test.input_writeln(randint(1, 2), l, r, randint( 1, 100000), randint(1, 100000)) test.output_gen("未命名1.exe") print(i) test = IO(file_prefix="data/test", data_id=20) n = randint(1, 100000) m = randint(1, 100000) test.input_writeln(n, m) for j in range(m): l = randint(1, n) r = randint(1, n) if l > r: l, r = r, l test.input_writeln(1, l, r, randint( 1, 100000), randint(1, 100000)) test.output_gen("未命名1.exe") test = IO(file_prefix="data/test", data_id=21) n = randint(1, 100000) m = randint(1, 100000) test.input_writeln(n, m) for j in range(m): l = randint(1, n//2) r = randint(n//2+1, n) if l > r: l, r = r, l test.input_writeln(2, l, r, randint( 1, 100000), randint(1, 100000)) test.output_gen("未命名1.exe") ```