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就暴力修改。