寄了,不知道咋回事。
可能是算法假了。
主席树直接搬过来的板子,应该没问题。
发现每一个生成的序列在任意时态都形如原序列中一段连续区间内大小在一定区间的数按序排列。
所以对于每一个生成的序列,维护其在当前时刻所对应到原序列上的左端点,右端点以及大小区间 (low,limit]
(这里为了写起来方便用了左开右闭,但与闭区间思路上无差异)
每次进行二操作就直接将来源序列的左端点,右端点,上界复制到当前序列,当前序列元素大小的下界就是询问中的 x ,再对来源序列的上界改动为 x 。
(因为下界是开的,所以当前序列不包含大小为 x 的元素)
这里还要对于 x 大于来源序列上界的情况做一个特判。
对于一操作,则继承来源序列的右端点,上界和下界。
当前序列的左端点则在来源序列的左端点与右端点间二分一个最靠左的前缀,使其包含的有效元素(即存在于来源序列中的元素)恰好等于 x 。当前序列的左端点即为这个前缀的位置加一,同时修改来源序列的右端点为这个前缀的位置。
注意左端点与右端点为闭区间。
这是评测结果。
calc函数为计算这一个序列的有效元素个数(也即在此序列左端点到右端点的区间内大于下界小于等于上界的数的个数)。