思路
如果只能交换相邻的两项,那么答案就是逆序对数量。于是就可以有最裸的暴力枚举第一次可以交换不相邻的两个位置。时间复杂度 。这样子很慢,有一个显然的事情就是我们交换的两项一定满足:。如果不构成逆序对肯定不优秀。
设交换之前的逆序对数量为 。则交换 后逆序对数量变成:。答案就是 。
将 看成二维平面上的一个点,答案就可以通过数左上角为 ,右下角为 的矩阵中点的数量,时间复杂度 。
可以发现,我们选择的 必然满足 左上方没有东西, 右下方没有东西,这样肯定不劣。这样已经可以分治 + 主席树平凡在 时间内求解了。但是非常不好写而且常数大
考虑每一个点 被哪些矩阵覆盖。设 表示最小的 满足 , 表示最大的 满足 。那么有 表示的以 作为左上角,以 作为右下角的矩形都是可行解。那么我们将这个矩形重新看做平面上的点 (i, j)。所有可以覆盖 的矩阵就在平面上形成了一个矩形,以 为左下角,以 为右上角。
这样问题就转化为求一个被最多矩阵覆盖的点的覆盖次数的最大值。扫描线维护即可。
复杂度是优美的 。