首页 > 代码库 > bzoj3295(线段树套平衡树(treap))
bzoj3295(线段树套平衡树(treap))
3295: [Cqoi2011]动态逆序对
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 861 Solved: 287
[Submit][Status]
Description
对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。
Input
输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正整数,即初始排列。以下m行每行一个正整数,依次为每次删除的元素。
Output
输出包含m行,依次为删除每个元素之前,逆序对的个数。
Sample Input
5 4
1
5
3
4
2
5
1
4
2
1
5
3
4
2
5
1
4
2
Sample Output
5
2
2
1
样例解释
(1,5,3,4,2)(1,3,4,2)(3,4,2)(3,2)(3)。
2
2
1
样例解释
(1,5,3,4,2)(1,3,4,2)(3,4,2)(3,2)(3)。
HINT
N<=100000 M<=50000
题意:RT
思路:线段树套平衡树碾压~第一次写,居然1Y了,6420MS,不知道是慢还是快
动态的删除元素,这个可以用线段树来完成,线段树里的每个节点维护一棵平衡树,当要删除一个元素时将包含该元素的所有线段树的节点都插入到节点所对应的平衡树
里面,然后预处理出每个元素的前面有多少个元素比它大和后面有多少个元素比它小,每次查询,只需要在包含的线段里查出比现在要删除的元素大的以及小的,这个可
以在各个节点所维护的平衡树里完成,然后细节看代码吧~~
<script src="https://code.csdn.net/snippets/462775.js" type="text/javascript"></script>
bzoj3295(线段树套平衡树(treap))
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。