Lucky Array

发布时间 2023-11-09 11:55:31作者: Zlc晨鑫

数据结构抽象题

法一:总共加 \(O(10^9)\) 次,我们常数超小的树状数组可以直接拿下!!!(时限4.0s)

法二:答案不多,值域不大,我们分块,块记录数出现的次数,然后用tag维护一下增量,注意cnt里的东西和tag没关系,查询才要用到tag。时间复杂度 \(O(30N\sqrt{N}=10^9)\),看似没优化,但是实际上当\(d<0\)时该做法依然可以通过!!!

法三:答案不多,值域不大,我们对每个数维护它到第一个 \(\ge\) 自己的幸运数的差值,建立线段树,节点维护最小值和最小值个数,显然答案就是 0 的个数,但是维护 0 的个数不方便,所以维护前面提到的信息。当有一个差值小于 0 的时候,我们暴力地去修改线段树节点,从根开始遍历,如果儿子小于 0 就递归它,每次的时间复杂度是 \(O(klogn)\)\(k\)是差值小于 0 的数的个数,相当于单点修改 \(k\)次,每个数最多操作30次,相当于最多单点修改 \(30n\)次,时间复杂度 \(O(30nlogn = 10^8)\),赢!!!