[NOIP模拟题][树状数组][线段树]

T1

给定一个序列,先输出逆序对数,然后有若干次操作,每次操作如下,选取一个数,这个数及所有位置在它后面,且值比它小的数,会重新有序地在它们的位置排列起来,每次操作后要求输出当前逆序对数
数据范围:n,m<= 105

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值