题目 | 蒋贤蒙 | 王赵安 | 王智彪 |
---|---|---|---|
A | 0 | 0 | 0 |
B | 1 | 2 | 0 |
C | 1 | 0 | 0 |
D | 0 | 0 | 0 |
E | 2 | 0 | 0 |
F | 2 | 0 | 0 |
G | 2 | 0 | 0 |
H | 0 | 0 | 0 |
I | 2 | 0 | 0 |
J | 2 | 0 | 0 |
给定一棵点权树,初始值各点权值为 $0$,接下来两种操作:
考虑离线操作,对每个权值,维护对他有贡献的操作序列。
首先对操作 $1$,显然 $x$ 会对所有是 $x$ 的因子的权值产生贡献,于是将操作 $1$ 加入到所有 $x$ 的因子的操作序列中。
对操作 $2$,直接丢到权值 $x$ 的操作序列处理即可。
接下来单独考虑每个权值的操作序列,发现操作序列一定都满足 $x\mid w(v)$ 这个约束。
于是只需要考虑 $l\le w(v)\le r$ 和 $v$ 是 $u$ 的最近祖先这两个约束。
首先转化一下$v$ 是 $u$ 的最近祖先这个约束,不难发现满足该约束的 $v$ 就是 $u$ 的祖先中 $\text{dfs}$ 序最大的点。
维护一个二维矩阵 $C$,$C[x][y]$ 表示 $\text{dfs}$ 序最大的 $v$,满足 $w(v)=x$ 且 $w(v)$ 是节点 $y$ 的祖先。
于是对操作 $1$ 等价于修改
$$ C[x][\text{dfn}(u)\sim \text{dfn}(u)+\text{sz}(u)-1]\gets \text{dfn}(u) $$
操作 $2$ 等价于查询
$$ \max\left(C[l\sim r][\text{dfn}(u)]\right) $$
考虑树套树维护 $C$,考虑修改操作共 $O(n\log n)$ 次,查询操作 $O(n)$,于是总时间复杂度 $O\left(n\log^3 n\right)$。
关于空间复杂度,首先对每个权值,由于他的倍数最多只有 $O(n)$ 个,所以修改操作最大只有 $O(n)$ 次。
树套树第二维是动态开点线段树,于是空间复杂度 $O\left(n\log^2 n\right)$。注意处理完每个权值的操作序列后要删除线段树,否则会爆空间。
给定一个序列 $A$,接下来两种操作:
$$ a_n=\left(\bigoplus_{i=1}^n b_i\right)\oplus\left(\bigoplus_{i=1}^n\bigoplus_{k=0}^{29} 2^k c(i,k)\right)\\ c(n,k)=\bigoplus_{i\times 2^k\le n} d(n-i\times 2^k,k) $$
简单来讲 $a_n$ 是 $b_i,c(i,k)$ 的前缀和,$c(n,k)$ 是 $d(i,k)$ 的隔 $2^k$ 项前缀和。
然后操作 $1$ 只需要修改 $b_i$ 即可。操作 $2$ 的影响按位考虑影响,将 $[l,r]$ 区间操作等效于 $[l,\inf),[r+1,\inf)$ 两次操作。
每次操作对每个位是按 $001111000011110000$ 的规律周期性变化的。
对该序列进行一次差分,于是得到 $001000100010001000$,这个可以利用 $c(n,k)$ 维护。
再一次差分得到 $001000000000000000$ 发现可以利用 $d(n,k)$ 维护。
最后处理一下最开始非周期的部分即可,时间复杂度 $O((n+q)\log v)$。