USACO23FEB Hungry Cow P
这个涂色很容易让人想到均摊的 set 维护,但是有可能修改同一个位置,不太可做。
同样地,我们考虑只带插入不同位置的情况。
考虑一个线段树做法,直接维护整行格子的权值和以及黑色格子的个数。考虑一个修改 \((i,j)\) 相当于区间覆盖 \([i,k]\) ,其中 \([i,k]\) 中修改前白色格子的数量为 \(j\)。显然有单调性,于是可以线段树上二分。
于是你可以把弱化版(铜组 T1)过了,复杂度 \(O(n\log w)\)。
考虑到两个下标相同的修改 \((i,j_1)\) 和 \((i,j_2)\) 分别在时刻 \(t_1,t_2(t_1<t_2)\) 进行,并且之间没有任何 \(i\) 位置的修改。可以看作 \((i,j_1)\) 操作的影响范围为 \([t_1,t_2)\),也就是说每次操作的影响范围都是一段区间。直接线段树分治,做完了。
由于不太好撤销,可以在时间线段树每个节点上开动态开点线段树。需要可持久化一下,并且合理利用空间。复杂度是 \(O(n\log n\log w)\) 的。