什么?LCT?不存在的。蒟蒻我怎么可能会LCT。
传送门
题解
听说这题的标算是LCT?我这么菜!怎么可能会LCT!!!看了一眼数据范围,很亲切啊!二话不说直接上分块!
首先,按照分块的套路,把$n$个弹力装置分成若干个块(块的大小取$\sqrt{n}$即可)。然后需要提前构造好两个数组:
1:$step[]$。$step[i]$表示落到第i个弹力装置上的绵羊还需几次才能跳到下一个块里(或者被弹飞)。
2:$pos[]$。$pos[i]$表示落到第i个弹力装置上的绵羊在被弹出当前块后会被弹到哪一个位置上。
这两个数组可以一开始从后往前在$\Theta(n*\sqrt{n})$的时间复杂度内构造出来。(我才不会告诉你我写这个是为了测试markdown的数学公式)询问的时候借助这两个数组就可以在$\Theta(\sqrt{n})$的时间复杂度内通过模拟计算出答案。
然后让我们再来考虑修改的问题。
自己思考一下,不难发现,修改了一个弹力系数之后,只有该块内的两个数组的值可能发生改变,然后从后往前暴力更新一下即可。
代码
比LCT短了不少
1 |
|