法一:总共加 \(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)\),赢!!!
标签:10,复杂度,个数,Lucky,tag,差值,Array,维护 From: https://www.cnblogs.com/zhangchenxin/p/17819390.html