CF2149G

给定大小为 \(n\) 的数组 \(a\)\(q\) 组询问,每次给定 \([l,r]\),请输出 \(a_l \sim a_r\) 中出现次数 \(\ge c = \lfloor \frac{r - l + 1}{3} \rfloor + 1\) 的那些值。

这应该算个套路题,其实将 \(3\) 改成 \(k\) 时一样的(\(k\) 较小)。

建出一棵主席树,这样就知道了 \([l, r]\) 每个数的出现次数。每次查询在主席树上进行暴力 dfs,若某个区间 \([L, R]\) 总共的出现次数小于 \(c\) 直接返回。

这样做,主席树的每一层只会至多访问 \(O(k)\) 个节点(因为 \(kc > r - l + 1\)),时间复杂度:\(O((n + qk) \log V)\)

posted @ 2025-10-15 08:19  xiehanrui0817  阅读(3)  评论(0)    收藏  举报