Codeforces Round #301 (Div. 2) E. Infinite Inversions

题目链接

今天注定是不能补掉了,先把理解到的思路写一些。

一、题意

有一个无限长的序列{1, 2, 3, 4, ...}。现在给出n个操作,每个操作由a[i]和b[i]构成,表示第a[i]个数将和第b[i]个数交换位置。n不超过1e5,a[i]和b[i]不超过1e9。求操作后产生的逆序对总数。

二、思路

官方题解(见E题部分)里面看了个大概,是将问题区分成两个部分。

可以知道,如果两个数都没有经历过操作,那么他们一定不会构成逆序对。于是构成逆序对的情况就可以分成这两种:1.构成逆序对的两个数都经过操作;2.构成逆序对的两个数一个经过操作、另一个没有经过,保留在原位置。

对于第一种情况,我们把操作中出现过的数离散化之后,利用求逆序对的常规方法即可求出(归并或树状数组,然而我现在不会树状数组了,可能归并也不一定敲得出来了。归并这个非常感谢许轲出在了算法期末考试里,让我会了这个方法)。

对于第二种情况,明天再写。

猜你喜欢

转载自blog.csdn.net/xuzonghao/article/details/94654396