专题

求区间第k小值

静态

分块

排序

划分树

动态

主席树

平衡树

子树求交

树上颜色问题

统计颜色数量

对于子树\(x\),子树内同种颜色的点只有深度最浅的对子树外有贡献

#3628. 「2021 集训队互测」树上的孤独

贡献上传:对于\(x\),设它同颜色祖先为\(p\),则\(x\)对路径\(p\thicksim x\)上的点都有贡献,则将\(p\thicksim x\)的点的深度线段树上\(dep[x]\)的权值都增加\(1\)

P2664 树上游戏

点分治,利用上面的原理,开桶统计即可

题解有说\(O(n)\)的树上差分做法

细节等写了再补

极差问题

涉及极差的,往往至少要知道一个边界值(\(max/min\)),或通过排序使得最小值可维护,可以对此列出DP等

P7514 [省选联考 2021 A/B 卷] 卡牌游戏

\(a[],b[]\)扔一起排序,问题变成找一段数\([l,r]\),使得每一个\(i\)\(a[i],b[i]\)中至少有一个被\([l,r]\)
包含,双指针维护即可

Group Projects

把最小值放入DP,发现多个集合不好维护,利用差分思想,每走过一个数将当前对极差产生的贡献加入

P8290 [省选联考 2022] 填树

把最小值放入DP:\(f[i][l]\)求子树\(i\)的数在\([l,l+K]\)之间的方案数,但是对于取不到最小值\(l\)的情况会被\(f[i][l+1]\)算重,考虑加维/差分掉\([l+1,l+K]\)的方案数

P9120 [春季测试 2023] 密码锁

二分答案,对于\(k=3\)的数据点,先考虑\(max\)\(min\)在哪一行,再检验剩下一行是否有\(D\le mid\)

状态压缩

状态枚举

利用lowbit可以快速获取所有前继的状态(100110 -> 100100)

利用for(int i=x;i;i=(i-1)&x)可以做到\(3^n\)枚举子集

位运算

\(\textcolor{red}{*}\)位运算优先级

注意:

1、加减号优先级高于一切位运算符(mid=l+r>>1);

2、按位运算符(&、|、^)优先级低于数值判断号((x&1)==(y&1));

异或

高斯消元

01trie

二进制拆分

按位分块

分位处理

[EER2]谔运算

P6623 [省选联考 2020 A 卷] 树

分位

考虑\(x\)对祖先的贡献,分位考虑,发现第\(i\)位在祖先链上的贡献为类似\(00011110\)的形式,则产生贡献的点是一段区间

01trie

异或操作,考虑01trie

发现区间加\(1\)操作无法维护,观察发现其实就是若干个结点交换儿子位置,但是在由高位到低位的01trie上每个结点都要交换,考虑由低位到高位建立01trie,此时只有右儿子有进位,递归处理右儿子即可

子集卷积 & 子集反演

见状压dp

posted @ 2024-11-02 17:04  Zhone_lb  阅读(12)  评论(0)    收藏  举报