CF1732D1

本题有一种思路不言而喻:每次用哈希表或者 map 记录一个数是否出现过,若是插入操作则直接在上述的数据结构里插入,否则开始一步一步的求解 $t$。注意:对于相同的 $k$ 要记忆化一下(毕竟只有插入没有删除),$t_{now}$ 一定大于 $t_{last}$。

给出较为严谨的时间复杂度证明:

考虑一种情况,假设插入有 $2 \times 10^5$ 次,询问也有有 $2 \times 10^5$ 次。虽然这种情况的总操作次数不合法,但是依旧是在同个数量级的,故而忽略多出来的常数。

接下来,发现有如下性质:

  • 操作的数较小不劣于操作的数较大。

    显然,操作的数更小那么他们的倍数会分布地更密集一些。

  • 操作的数在总体比较小的情况下,分布地更密集一些能使时间复杂度卡得更坏。

有了如上性质,我们不难发现最坏的情况是插入的数为 $1$ 到 $2 \times 10^5$,查询的数也是这个范围。时间复杂度为 $O(\frac{q}{1}+\frac{q}{2}+...+\frac{q}{q-1}+\frac{q}{q})=O(q \log q)$。

代码

posted @ 2023-05-03 09:33  徐子洋  阅读(11)  评论(0)    收藏  举报  来源