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)$。
代码。