OI技术宅

Tech Otakus save the world!
Welcome,my dear friends!
【I'm kiana/kiana810@126.com】

【CQOI2011】动态逆序对

【题目描述】

对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。

【输入】

输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正整数,即初始排列。以下m行每行一个正整数,依次为每次删除的元素。

【输出】

输出包含m行,依次为删除每个元素之前,逆序对的个数。

【输入样例】

5 4

1

5

3

4

2

5

1

4

2

【输出样例】

5

2

2

1

【题解】

首先统计出初始时的逆序对,然后删除每个数对逆序对个数的影响,等于此时这个数前面比它大的数与这个数后面比它小的数之和,所以愉快地写一个区间线段树套平衡树即可~

然后愉快地被卡常了……

反正是在练习树套树啊,待会儿在想一个复杂度更低的办法吧。

【代码】

时间复杂度O(nlog^2n),正迈向polylogn的坑中~

http://paste.ubuntu.com/11658680/

评论

© OI技术宅 | Powered by LOFTER