# 晶块链表 - 参考时间限制:**0.5 秒**([评测环境与性能](../../../docs/评测环境与性能.md))。 - 实际时限:在目标环境实测标准程序最慢测试文件的中位时间,乘以 2,再按 0.5 秒向上取整。 - 内存限制:**128 MB**。 ## 背景故事 DNF 的活动中,玩家们共同操作一列晶块。把一段晶块换成指定种类时,每个位置都会按照新旧能量的差值贡献分数。活动还允许调整某一种晶块的能量,因此同一次替换在不同时间可能得到不同分数。 ## 形式化问题描述 有 $n$ 个位置,编号为 $1,\ldots,n$ ,共有 $k$ 种晶块,种类编号为 $1,\ldots,k$ .位置 $i$ 当前的种类为 $c_i$ ,种类 $t$ 当前的能量为 $e_t$ . 依次执行 $m$ 次操作: - `0 l r c` :先按操作前的状态计算分数 $$\sum_{i=l}^{r}|e_{c_i}-e_c|$$ 输出该分数,再把区间 $[l,r]$ 内所有位置的种类设为 $c$ . - `1 c e` :把种类 $c$ 的能量设为 $e$ .这会影响所有该种类晶块在后续计分时的能量,但不改变任何位置的种类,也不产生分数。 不同种类可以具有相同能量。即使某次替换的分数为零,种类修改仍然生效。 ## 输入格式 第一行三个整数 $n,k,m$ .第二行 $n$ 个整数,为初始种类 $c_1,\ldots,c_n$ .第三行 $k$ 个整数,为初始能量 $e_1,\ldots,e_k$ . 接下来 $m$ 行,每行一个操作。第二行或第三行对应的数量为零时,该行为空行。 ## 输出格式 对每个操作 0,按出现顺序输出一行整数。没有此类操作时不输出任何内容。 ## 样例 1 ### 输入 ```text 5 5 5 1 2 3 4 5 1 2 3 4 5 0 1 2 3 0 1 2 1 1 4 1 0 1 5 5 0 5 5 4 ``` ### 输出 ```text 3 4 14 4 ``` ## 样例 2 ### 输入 ```text 3 2 4 1 1 2 5 5 0 1 3 1 1 1 2 0 1 3 2 0 2 2 2 ``` ### 输出 ```text 0 9 0 ``` ## 样例 3 ### 输入 ```text 0 0 0 ``` ### 输出 ```text ``` ## 样例解释 样例 1 首次替换得到 $|1-3|+|2-3|=3$ .修改第四种晶块的能量后,最后两次替换按更新后的能量计分。 样例 2 的第一次替换得分为 $0$ ,但三个位置都变成了种类 $1$ .将其能量改为 $2$ 后,再全部替换为能量 $5$ 的种类 $2$ ,得分为 $9$ .样例 3 为空实例,输出为空。 ## 数据范围与保证 对 100% 的数据:$0\le n,k\le500000$ ,$0\le m\le100000$ .每个出现的种类编号均在 $1,\ldots,k$ 内,初始和修改后的能量均满足 $1\le e\le50000$ . 每次操作 0 满足 $1\le l\le r\le n$ .所有输入合法:例如 $n>0$ 时必有 $k>0$ ,$n=0$ 时没有操作 0,$k=0$ 时没有任何操作。 | 分值比例 | 额外条件 | | --- | --- | | 100% | 无额外条件 |