CF794F Leha and security system
题目描述
Bankopolis,这个你已经熟悉的城市,终于新开了一家银行!不幸的是,它的安全系统还没有完全运行正常……与此同时,黑客 Leha 来到了 Bankopolis,决定测试下这个系统!
银行有 $n$ 个用于存放客户资金的账户。一个长度为 $n$ 的数列 $a_{1},a_{2},...,a_{n}$ 表示每位客户当前的资金数额。Leha 想要向银行的数据库发起若干请求,查询区间资金总额,或修改区间内资金数额的部分数字。利用系统中的一个漏洞,Leha 可以向数据库发起两种操作:
- `1 l r x y`:将区间 $[l,r]$ 内每个 $a_{i}$ 中的所有数字 $x$ 替换为数字 $y$。例如,如果将数字 $11984381$ 中的 $8$ 替换成 $4$,得到 $11944341$。需要注意的是,Leha 为了保持隐秘,永远不会把数字替换成 $0$(即 $y\ne 0$)。
- `2 l r`:查询并输出区间 $[l,r]$ 内 $a_{i}$ 的和。
由于 Leha 是一名白帽黑客,他不想在真实数据库上测试这个漏洞。你需要为 Leha 实现一个类似的数据库进行测试。
输入格式
第一行包含两个整数 $n$ 和 $q$($1\le n\le 10^{5}$,$1\le q\le 10^{5}$),表示银行账户数量和操作数量。
第二行包含 $n$ 个整数 $a_{1},a_{2},...,a_{n}$($1\le a_{i}
输出格式
对于每个第二类操作`2 l r`,输出一行一个整数,表示所求区间的和。
说明/提示
我们来看一个样例:
初始序列为 $[38,43,4,12,70]$。
第一次修改后,将区间 $[1,3]$ 内所有数字 $4$ 替换为 $8$,新序列为 $[38,83,8,12,70]$。
第一次求和操作为区间 $[2,4]$ 的和,即 $83+8+12=103$,因此这个查询的答案是 $103$。
第二次修改后,序列变为 $[38,83,8,12,78]$,第三次修改后变为 $[38,73,7,12,77]$。
第二次求和操作为 $[1,5]$ 的和,即 $38+73+7+12+77=207$。
由 ChatGPT 5 翻译