专栏文章
题解:P14009 数字游戏
P14009题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minweniw
- 此快照首次捕获于
- 2025/12/02 09:27 3 个月前
- 此快照最后确认于
- 2025/12/02 09:27 3 个月前
本题可以做到 不带 log。
首先做 容斥,转化为对每个 求出 序列的所有区间乘积的和。
交换扫描的维度,扫描序列维,用线段树维护值域维。
于是我们要干的事情是: 次,每次对 个区间 apply 修改,这些区间是 的整除分块相等的区间。
可以在线段树上并行所有修改操作,写出如下代码:
CPPvoid 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);
}
我们可以证明上面代码的复杂度是 的:
对于线段树上的节点 ,只有 才会递归下去。
对线段树的每层数这样的节点数,在有 个节点的一层,有 个 的点。
总个数为 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...