线段树
[NOI2017]整数(https://www.luogu.org/problemnew/show/P3822)
思路:
线段树,每位存1/0,加法时将a中二进制表示下为1的位取出,分别加入序列,寻找x位左边最靠近x的0,对这个位置到x位进行区间反转,进行进位操作,线段树分别维护一段区间最右的0和1的位置,打懒标记,此时时间复杂度O(n*log(1e7)*log(a))
考虑优化,上述做法将a的二进制表示拆开,若想降低这个log(a)的复杂度,选择暴力将需要修改的这32位数取出,与a直接计算,将计算后的结果放回序列,进位只需在本次处理的最高位进一次。暴力取数的复杂度为log(a)+log(1e7),从而将复杂度变为一个log,可过。