P6707 [COCI 2010/2011 #7] UPIT
题目背景
Mirko 厌倦了为了各种任务去实现各种数据结构。所以,他决定写一个终极数据结构去操纵他最喜欢的数字序列。
快来帮助他吧!
Mirko 会给你他的数列,以及一系列你必须执行的操作。每个询问要么询问关于数列的信息,要么修改现有的数列。下面列出了所有可能的操作类型。
查询种类|描述|例子|
:-:|:-:|:-:
`1 A B X`|将 $[A,B]$ 中所有元素值更改为 $X$|$(9, 8, 7, 6, 5, 4, 3, 2, 1)\to$ $1$ $3$ $5$ $0$ $\to$ $(9, 8, 0, 0, 0, 4, 3, 2, 1)$
`2 A B X`|将 $[A,B]$ 中所有元素增加一数,第 $A+k$ 位增加 $(k+1) \times X$|$(9, 8, 7, 6, 5, 4, 3, 2, 1)\to$ $2$ $3$ $5$ $2$ $\to (9, 8, 9, 10, 11, 4, 3, 2, 1)$
`3 C X`|在原来的第 $C$ 位前插入一个数,数值为 $X$|$(9, 8, 7, 6, 5, 4, 3, 2, 1)$ $\to$ $3$ $4$ $100$ $\to$ $(9, 8, 7, 100, 6, 5, 4, 3, 2, 1)$
`4 A B`|查询 $[A,B]$ 的数值和|$(2, 18, 7, 6, 1, 4, 7, 7, 2)$ $\to$ $4$ $6$ $7$ $\to$ $result: 11$
题目描述
给定一个数列 $f$ ,有以下操作。
设数列当前长度为 $n$。
|查询种类|描述|
|:-:|:-:|
`1 A B X`| $f_i=X(A \le i \le B)$
`2 A B X`| $f_i+=(i-A+1) \times X(A \le i \le B)$
`3 C X`| $f_{i+1}=f_i(C \le i \le n)$ $f_C=X$
`4 A B`| 求$\sum^B_{i=A}f_i$
输入格式
第一行两个正整数 $n$ , $Q$,分别表示数列初始长度和操作数量。
第二行 $n$ 个非负整数表示初始数列。
接下来 $Q$ 行每行各包含一个如上询问。
输出格式
对于每一个 $4$ 号操作,输出一行答案。
说明/提示
#### 数据规模及约定
设当前数列长 $t$。
对于 $100\%$ 的数据 $1 \le n$ , $Q \le 1 \times 10^5$ , $f_i \le 1 \times 10^5$ , $1 \le X \le 100$ , $1 \le A \le B \le t$ , $1 \le C \le t + 1$。
#### 说明
本题满分 $130$ 分。
译自 [COCI2010-2011](https://hsin.hr/coci/archive/2010_2011/) [CONTEST #7](https://hsin.hr/coci/archive/2010_2011/contest7_tasks.pdf) T6 UPIT。