Stargazer' blog

渴望驻足的时光转瞬即逝
希求解脱的日夜寸阴若岁

0%

2024北京市赛题解

链接

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$ 拆开后交换求和顺序,发现是个等幂和和卷积