首页 > 其他分享 >URAL2124 - Algebra on Segment

URAL2124 - Algebra on Segment

时间:2023-01-05 19:56:23浏览次数:37  
标签:Span URAL2124 复杂度 Algebra 查询 离散 对数 Segment 乘法

题意

维护一个序列,支持区间乘 \(x\),和查询区间的 \(Span\) 的大小。一个集合的 \(Span\) 定义为可以表示成其中若干可重复整数的乘积的数的集合。所有计算在模 \(p\) 意义下进行。

经典技巧

我们可以利用离散对数将每个 \(x\) 表示成 \(g^a\) 的形式,此时可以将乘法转化为加法。容易发现,\(Span(l,r)=\frac{p-1}{gcd(a_l,a_{l+1},\cdots,a_r,p-1)}\)。

离散对数

本题中因为要多次查询离散对数,即 BSGS 的复杂度为 \(O(\frac{p}{B}+(n+q)B)\),此时取 \(B=\sqrt{(n+q)p}\) 为最优。

维护序列

为了查询区间 gcd 值,我们可以考虑将序列差分,此时变成单点修改,利用线段树即可完成。

时间复杂度

时间复杂度为 \(O(\sqrt{p(n+q)}+(n+q)\log^2 n)\),需要大力卡常。

总结

对于只涉及到乘法和乘方的维护问题,可以利用离散对数转化成加法和乘法操作。

标签:Span,URAL2124,复杂度,Algebra,查询,离散,对数,Segment,乘法
From: https://www.cnblogs.com/Kevin090228/p/17028718.html

相关文章