- 考虑线段树能不能维护一个操作:
- 考虑如何合并线段树上的两个子树
- 考虑如何给一个点叠加 \(tag\)。
- \(gcd\) 的性质:一个区间的 \(gcd\) 是这个区间(在前面加上一个 \(0\))的差分数组的 \(gcd\)。
例子: \(gcd(1, 3, 4, 6) \rightarrow gcd(1, 2, 2, 2)\ =\ 1\), \(gcd(2, 4, 8) \rightarrow gcd(2, 2, 4)\ =\ 2\)
- \(lowbit_x = x\ \& -x\)
- 连续字段和可转化为前缀和的问题。
- 注意树状数组更新的值域。
- \(\&, |\) 具有单调性,且一段区间的 \(\&, |\) 可以用 \(st\) 表维护。
- \(trick\):将一个区间的条件分成多个条件分别处理后合并区间
- 树状数组二分:
由大至小枚举答案在二进制下的每一位是一还是零,然后用 \(tr_x\)(\(x\) 为当前枚举位数的十进制)然后累加答案,考虑当前这一位的统治区间为\([1,\ \sum_{i=max_{digit}}^{cur_{digit}}x\&i]\) 与二分条件相比较,最终决策当前位选一还是零。
- 线段树二分:
在一颗线段树上的一个节点处:考虑整个左儿子的贡献是否满足二分条件,如果满足,进入左儿子,否则进入右儿子。
- 数据结构上二分的本质:不断查询前缀和并与二分条件比较。
posted @
2025-07-25 16:00
Optimist_Skm
阅读(
7)
评论()
收藏
举报