K:
考虑先全部加到 $2^{30}$ ,这最多 $O(nlog)$ 次,之后就是循环了。
D:
就是考虑相邻三个点是否都在一条链上,已经不会写LCA了,绷。
G:
建一棵trie树出来,从低到高维护每一位是否xor,那么每一层如果有个点有多个儿子,那么询问左儿子异或后的最大值和右儿子异或后的最小值,就知道这一位是否为1,如果没有那么怎么都不影响。
E:
可以观察到就是生成函数的多次区间积,建一棵猫树出来,即线段树维护每个层的mid往后往前的前后缀积,那么每次询问就是两个 $O(m)$ 的多项式相乘,发现还要统计 $b$,但观察可以发现b也可以看成一个多项式,只需要乘之后的第 $m$ 项即可,所以可以单次 $O(m)$ 计算。
H:
考虑序列的同一个深度的相邻两个点,那么就是他们lca的儿子之间有顺序,以及他们自己有顺序,于是topsort即可。
B:
可以发现只需要考虑 $n\geq 2m$ 的组合数,于是 $m>20$ 就没用了。$m=1$ 就是 $[1,n]$, $m\geq 4$ 的只有不到1k个,可以每次暴力查询,于是只需要考虑 $m=2,3$ 的情况,大概就是离线询问,然后按照n排序,每次维护已有的 $C_2(i),C_3(i)$ 以及同时是 $C_2,C_3$ 的数字,维护一个有序的vector和哈希表,每次查询二分,然后再把 $m\geq 4$ 的
查询是否已经出现过。注意给 $\geq 4$ 的去重,会发现实际只有一个3003,或者用哈希表去重,这样复杂度是线性的。
F:
考虑 $b_i=\max_{l_j\le i\le r_j}v_j$,即最后的下界,那么 $a_i<b_i$ 的一定先改到 $b_i$,然后不动。
对于其他的,将每个 $v$ 和所有这个 $v_i=v$ 的区间取出来,那么就是若干点,修改每个有代价,要求所有区间都至少一个点被修改,这个可以线段树优化dp。
C:
考虑相邻两个盘子间的边的贡献
那么就是 $\sum_{i,j}\min(j,n-j)C(n,j)i^j(m-i)^j$
这个把后面 $(m-i)^j$ 拆开后交换求和顺序,发现是个等幂和和卷积