[CERC2019] Be Geeks!

非常有意思的一道题

这道题让我们求区间gcd乘max。如果只有max的话那非常好求,加进来个gcd就非常棘手。考虑对于一个数\(a_{i}\),他所在的最大值区间为[l,r],那么有一个经典的结论,一个数的因数大约有\(\log V\)个,那这样我们就可以将[l,i]和[i,r]拆成gcd相同的几个区间,这些区间的数量大约为\(\log V\)个,那么将其暴力枚举,再计算贡献,就是这两段区间的gcd的gcd,乘上两段区间的积,再乘上\(a_{i}\)。那怎么枚举这些区间呢,这个可以二分,二分出当前区间第一个往后最远的gcd相同的地方,那怎么快速求区间gcd和呢,我们可以使用st表,然后就做完了,代码实现起来不烦。

posted @ 2024-04-10 21:20  wuhupai  阅读(4)  评论(0编辑  收藏  举报