如果每次查询都枚举所有数对,时间复杂度是 O(k2),无法通过。
考虑维护当前答案 W。当某个位置从旧值 x 修改成新值 y 时,只有包含这个位置的数对发生变化,因此:
W′=W−z=x∑∣x−z∣+z∑∣y−z∣夜场拍卖同时挂出 k 件拍品。每件拍品当前有一个整数出价,记成数组 v1,v2,…,vk。值班估价员要盯的不是单件高低,而是当前全部拍品两两出价的绝对差之和,用来衡量这一轮报价有多散。场刊规定:可以把某一件拍品的出价改成新值,也可以随时查询当前的价差总和。
对当前出价数组 v,价差总和定义为所有无序对的绝对差之和。也就是先枚举所有下标对 (p,q)(满足 1≤p<q≤k),再把 ∣vp−vq∣ 加起来:
W(v)=∣v1−v2∣+∣v1−v3∣+⋯+∣vk−1−vk∣.共有两类指令(指令编号必须是 1 或 2):
1 p y:把 vp 改成 y。2:查询当前的 W(v)。第一行一个整数 G,表示后面有多少段互不相关的场次记录。对每一段单独维护拍品出价,并按出现顺序输出该段内每一次查询的结果。全部场次的 (k+q) 之和不超过 500000。
其余约束:1 ≤ G ≤ 100000,单段 1 ≤ k,q ≤ 200000,出价与修改值的绝对值不超过 1000000000。
第一行一个整数 G(1 ≤ G ≤ 100000)。
每一段记录格式如下:
第一行两个整数 k,q(1 ≤ k,q ≤ 200000)。
第二行 k 个整数 v1,v2,…,vk(绝对值不超过 1000000000)。
接下来 q 行,每行一条指令:修改为 1 p y(1 ≤ p ≤ k,绝对值不超过 1000000000);查询为单独一个 2。
保证全部记录中 k+q 的总和不超过 500000。
对每条查询指令输出一行一个整数,即当前的 W(v)。
输入
1
3 4
0 5 2
2
1 3 9
2
1 1 5
2
输出
10
18
8
说明
初始出价为 0、5、2:
把第 3 件改成 9,变成 0、5、9:
把第 1 件改成 5,变成 5、5、9:
输入
1
2 2
7 7
2
1 2 3
2
输出
0
4
说明
两件拍品出价相同,绝对差为 0。把第二件改成 3 后,∣7−3∣=4。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.