@Cyani
2020-07-25T10:30:46.000000Z
字数 724
阅读 712
相信大部分的题目,大家都可以独立或者讨论解决。这里简单写一下 G,H,I,K 的做法。
最后只需要输出总和,考虑拆贡献。对于表达式
我们以整行来考虑。随着乘以行的数增大,每个数的位数也会增大(至多 次)。那么总共行的位数总变化次数为 。进而求出每一行的位数。
对于每个询问先二分出最后再哪一行。接下来我们可以使用主席树或者离线+BIT来维护每一行的各个位数,询问在数据结构上二分即可。
时间复杂度为两个 ,听说有一个 做法,大家可以自行思考 。
把它放在 图图像上,被感染的边界上下都是凸的。先用一个队列搞出上下边界,剩下的直接二分,找到和边界的那一部分先相交。
显然是一个二维的多项式乘法。可考虑二维 FFT,有两种实现方法。
可以对行列分别进行 DFT,DFT 对行列实际上是独立的。比如 可以先看作是关于 的多项式,DFT 就将单位根带入求值。接着可以看做是关于 的多项式。这样就完成了二维 DFT。实际上 FWT 就是 维且每维大小都是 的高维 DFT。
也可以将二维转成一维做 DFT,取足够大的 ,令 ,再做一维 DFT 即可。这种做法不需要对 DFT 进行修改,但是常数也略大。