2023.6.20 闲话

假期把别当酱补了,膜拜。

推歌:

  • うたかたアリア - みつあくま feat. 初音ミク(膜拜国际特级大师门铃P,后面忘了).
  • 这里没有■■■■ - 异梦挽歌 feat. 乐正绫(好像是关于逆模因部的).
  • Symphony Op.1 -CHAOS- - Laur .

K8He:中国人不推洋歌。

NaOH 语录

NaOH:我是卦神。

NaOH:不,我说的是「我是呱神」。

NaOH:你 tm 才女同。

NaOH:我河北省河北省队。

NaOH:我是核废水。

NaOH:JJ 大王,你有 J 吗?

NaOH:好怀念 Rolling_star 啊。

2NaOH + CO = NaCO + H2O。

rukthq

给序列 \(\{a_n\}\)\(q\) 组询问,每次给三个正整数 \(l,r,k\),询问 \(a_{l\cdots r}\) 去重后的第 \(k\) 小值 .

强制在线 .

rukthq = range unique k-th query . joke3579 社论 .

后面 \(v\) 是值域 .

首先需要去重不难想到记每个数 \(u\) 的前驱 \(\newcommand{\pre}{\operatorname{pre}}\pre(u)\) .

二分答案后只需要查去重排名,可以看成三维偏序:\(l\le i\le r\)\(\pre(a_i)<l\)\(a_i\le x\) . 使用树套树维护即可 2log .

那么,总共的时间复杂度就是 \(O(n\log^2n+q\log^3n)\) .

但是对于二分来说,和线段树应当是可以天然去掉一个 log 的 .

具体的,外层值域线段树描述 \(a_i\le x\),内层套一棵主席树,维护每个前缀的 \(\pre\) 值 . 查询时,在外层线段树上二分即可 . 时间复杂度 \(O((n+q)\log^2n)\) .

可能需要动态分配内存以达到 2log 空间 . 使用一些东西可以做到更小空间 .


(然而 Kaguya 写了个程序跑出来好像空间相当小,还不知道是为什么)

但是感觉不如分块,首先分块之后块两两之间建一个值域分块维护去重 \(k\) 小值,用 \(O(1)\) 修改 \(O(\sqrt v)\) 查询的算法 . 不过这个每个就 \(O(v)\) 空间了有点受不了 .

可以发现其实这个值域分块只需要维护区间每个元素的出现次数和区间至少出现 1 次的元素个数,前者可减所以直接前缀和即可,后者只需要在块上记所以沿用值域分块的话就是 \(O(\sqrt v)\) 空间 .

平衡可得所有块长取根号最优,则时空 \(O(t\sqrt t)\)(毛估估,其中 \(t=n+v\)).


敬请期待新科技(

posted @ 2023-06-20 19:15  Jijidawang  阅读(81)  评论(1编辑  收藏  举报
😅​