线段树(Segment Tree)是一种二叉树,可视为树状数组的变种,最早出现在 2001 年,由程式竞赛选手发明。此数据结构实际应用用途不大,但由于其程式易于实作而被广泛应用于程式竞赛当中。其用途是在 O(log N ) 查询一个指定区间内的信息,并可在同样的时间复杂度支持更新等操作。
为了学习线段树,你得到了一个长度为 n 的数组 a(下标从 1 开始),所有元素初始值均为 0 。你需要进行 q 次操作,操作有三种:
1 x y 表示:把 a[x] 的值修改为值修改为 y 。
2 x y 表示:把 a[x] 的值修改为值修改为 a[x] + y 。
3 y 表示:把数组中全部的值修改为 y 。
进行每次操作之后,你都要查询数组中所有元素的和。
本来这道题是在仙人掌上对一条路径操作并支持历史版本查询,鉴于这只是一套 NOIP 模拟题的签到题,你只需要解决这个弱化版的问题。