ai 可能为 0,即不做任何改变。

ai 可能大于目前数组 V 所包含的元素个数,此时视为将数组内所有元素变为 1。

请你输出所有操作完成后的数组 V。

每组数据第一行包含整数 n。

每组数据输出一行结果,表示所有操作完成后的数组 V,数组内元素之间用空格隔开。

保证一个测试点内所有 n 的和不超过 2×10^5。

我们会发现问题可以简化为:给定一个长度为n的0串,然后去修改它中的一些区间变为1。那么我们发现其实有的位置可以被修改很多次,只不过如果已经是1了,那么再修改就不起作用了。所以我们每次,拿到一个值,相当于将一个范围内的所有数字都变为1,于是我们就对修改次数进行差分即可,最后我们求差分数组的前缀和来还原原数组之后,只要是某个位置上的值不是0,那么这个位置就是1。

这里有个小的trick:对于一个非0的值变为1,对于0就是0,有什么简洁的操作吗?答:!!a即可。会将非零值变为0,将0值变为1。

根据方法一所说,这其实就是将原本一个0串的区多个区间修改为1的过程,只不过这个过程会有重叠,有重叠就意味着时间可能会超。因此,我们可以利用区间合并算法来将重叠的区间进行合并。