1 条题解

  • 2
    @ 2026-6-13 9:28:13

    对于每一个 kk,假设能 O(1)\mathcal{O}(1) 找出对于一个 ll,最大的 rr 使得 [l,r][l,r] 内区间数字的种类数 k\leq k,就能 O(nlogn)\mathcal{O}(n\log n) 解决,因为对于每一个 kk 最多会找 nk\frac{n}{k} 次。

    那么现在问题变成快速对于一个 ll,求一个最大的 rr 使得 [l,r][l,r] 内区间数字的种类数 k\leq k,而且要求在线,但对于每个 kkll 的询问是递增的。

    枚举 ll,对于 [l,n][l,n] 中的每个位置记录它是否是 [l,n][l,n] 中第一次出现,区间数字的种类数即为区间和。

    现在问题变成了支持单点修改,快速求一个最大的 rr 使得 [1,r][1,r] 的和 k\leq k,用树状数组维护前缀和,由于树状数组下标为 xx 处存的值为 (xlowbit(x),x](x - lowbit(x),x] 区间的和,那么从高到低枚举所求 rr 的二进制位 kk,看是否能够往后跳 2k2^k ,就能求出这个最大的 rr 了。

    总的时间复杂度是 O(nlog2n)\mathcal{O}(n\log^2n)

  • 1

信息

ID
2670
时间
1000ms
内存
512MiB
难度
9
标签
(无)
递交数
3
已通过
1
上传者