趁别人题解没有放出来赶快写一篇
整数序列,操作 区间加 区间变成sqrt(下取整) 区间和
考虑一下对于每个区间里所有sqrt不同的段操作,那么可以在O(段数logn)一次的时间内完成sqrt操作.考虑sqrt操作一定会使相邻的数之间的差的绝对值变小(除非只差1,等下再讲),那么要恢复原来那样的段数需要使用O(段数)次区间加,这样均摊下来复杂度就是2个log(也许是一个log..).
而我们发现如果Min,Max之间只相差1且floor(sqrt(Min))!=floor(sqrt(Max))这样的段我们可以先sqrt然后区间加,每次都操作O(段数)个段复杂度就炸了. 我们发现这个条件其实非常强,而且可以直接转化成一个区间加操作.那复杂度就没有变化了.