T1
给定一个序列,先输出逆序对数,然后有若干次操作,每次操作如下,选取一个数,这个数及所有位置在它后面,且值比它小的数,会重新有序地在它们的位置排列起来,每次操作后要求输出当前逆序对数
数据范围:n,m<= 105
动态维护逆序对数量,这道题好有意思
我们规定一个数对答案的贡献就是在它后面且比它小的数的数量,那当我们对一个数进行操作之后,它后面所有比它大的数贡献不变,而比它小的数的贡献会变为0,即当一个数最早它前面某个比它大的数倍操作以后,它贡献就会清零
那么思路就来了,对于每一个数找到它最早被贡献清零的时间,首先O(
n2
)的枚举是肯定可以的,但最终得分和O(mnlogn)也没有区别
我们可以用线段树来维护,不过是离线处理
序列从左到右,我们一次update每一个数,在它的值的位置插入第一次操作它的时间,并在线段树上进行相应的修改,那很明显,在它后面的数只需要query后面数的值到max这一段,来询问时间的最小值