题解:AT_arc210_b [ARC210B] Remove Median Operations
更好的体验。
B - Remove Median Operation
题目传送门。
题目大意
有序列
有
- 类型
1 ,A_{i_q}\gets x_q 。 - 类型
2 ,B_{i_q} \gets x_q 。
每次修改后给出以下答案:
(这些操作不影响序列值)将
思路
个人感觉 A 比 B 思路难,B 比 A 实现难。
手玩几个样例能发现性质——将
手玩一下样例
此时
前面和为
因此要删的值是
修改用线段树或者树状数组维护,查询最早位置用二分。而映射到值域的操作中,值域太宽泛了,空间直接爆掉,所以将所有的
因此这道题是比较板子的权值线段树。
也许是这道题放的比较松,或者 AtCoder 的评测机太给力了,直接答案二分套上原生的线段树区间查询加持线段树逆天常数它还是过了。甚至都不用整体二分。
为什么这是正确的
让我们来感性地理解一下这个过程。
一个
- 其大于中位数,中位数右移。
- 其小于中位数,中位数左移。
- 其就是中位数,中位数不动。
所以中位数从一个位置开始,一直左移右移或不动,在序列中的位置变化是连续的。
而其选择的一直是中间的值,所以在刚刚的序列中,也是选择中间
提交记录。