Description
Link:CF992E
给出一个长度为 n 的数组 a,记 si=∑j=1iaj。
有 Q 次操作,每次操作给出两个整数 p,x,表示将 ap 赋成 x。每次操作后,你都需要判断是否存在一个位置 i 满足 ai=si−1。若存在,输出任意一个满足条件的 i。
数据范围:1≤n,Q≤2×105,0≤ai≤109,1≤p≤n,0≤x≤109。
时空限制:3s / 256MiB。
Solution
注意到 ai≥0。若 ai=si−1,则 si=2si−1。故满足要求的位置个数是 O(loga) 级别的。
进一步,考虑 ai≥si−1 即 si≥2si−1。满足该要求的位置个数也是 O(loga) 级别的。
使用线段树维护 ai−si−1 的最大值。每次暴力地遍历整棵线段树,遇到最大值 <0 的区间就返回,遇到一个叶子就判断该点对应的 ai−si−1 是否等于 0。
时间复杂度 O(nlognloga)。