专栏文章

题解:P14009 数字游戏

P14009题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minweniw
此快照首次捕获于
2025/12/02 09:27
3 个月前
此快照最后确认于
2025/12/02 09:27
3 个月前
查看原文
本题可以做到 Θ(nV)\Theta(n\sqrt V) 不带 log。
首先做 gcd\gcd 容斥,转化为对每个 vv 求出 aiv\lfloor \frac{a_i}{v} \rfloor 序列的所有区间乘积的和。
交换扫描的维度,扫描序列维,用线段树维护值域维。
于是我们要干的事情是:nn 次,每次对 V\sqrt V 个区间 apply 修改,这些区间是 xx 的整除分块相等的区间。
可以在线段树上并行所有修改操作,写出如下代码:
CPP
void update(int p,int l,int r,int x){
	if(x/l==x/r){
		pushtag(p,x/l);
		return;
	}
	int mid=l+r>>1;
	pushdown(p);
	update(p<<1,l,mid,x);
	update(p<<1|1,mid+1,r,x);
	pushup(p);
}
我们可以证明上面代码的复杂度是 V\sqrt V 的:
对于线段树上的节点 [l,r][l,r],只有 xlxr\lfloor \frac{x}{l} \rfloor \ne \lfloor \frac{x}{r} \rfloor 才会递归下去。
对线段树的每层数这样的节点数,在有 VV 个节点的一层,有 Θ(V)\Theta(\sqrt V)xlxr\lfloor \frac{x}{l} \rfloor \ne \lfloor \frac{x}{r} \rfloor 的点。
总个数为 V+V2+V4=Θ(V)\sqrt V + \sqrt{\frac{V}{2}} + \sqrt{\frac{V}{4}} \cdots = \Theta(\sqrt V)

评论

0 条评论,欢迎与作者交流。

正在加载评论...