A
背包。
D
枚举固定的前缀,计算后缀不同个数1的贡献。
F
dsu on tree维护一个数组t[][][]。t[i][j][k]表示当前子树内a[u]=i且u的第j位是k的u的个数。
这个东西没办法直接维护的,但是对于
,你没必要知道
是什么,假如
的第
位是0,那么你需要知道第
位是1的
的个数即可。
因此把直接拆成20位,就可以统计答案了。
K
不妨设,打表后会发现
,这就可以直接
预处理出符合条件的二元组了。
但是还是不好直接做,不过如果打表技术再高超一点,会发现对于每个,满足条件的
最多只有
个。
这样操作2就按秩合并,操作3就暴力修改。