#L2657. 「POI2007 R2」立方体大作战 Tetris Attack

    ID: 5175 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>贪心数据结构树状数组模拟栈模拟逆序对相邻交换排序

「POI2007 R2」立方体大作战 Tetris Attack

题目描述

立方体大作战的游戏规则是这样的:给定一个有 2n2n 个正整数的栈,每个正整数恰好出现两次。玩家每次可以交换两个相邻的正整数。如果两个相同的正整数相邻,则把这两个数从栈中移除。求最少的交换次数。

输入格式

第一行一个整数 nn。接下来 2n2n 行以从栈底到栈顶的顺序表示该栈,每行一个正整数 aia_i (1ain1 \le a_i \le n)。每个正整数恰出现两次,且初始时没有两个相同的正整数相邻。

保证存在不多于 10000001\,000\,000 次交换的解。

输出格式

输出最少交换次数以及一组方案。

第一行有一个整数 mm,表示交换次数。

接下来 mm 行每行一个整数 pip_i,表示将从栈底数起第 pip_i 个正整数与第 pi+1p_i+1 个正整数交换。

如果有多组解,输出任意一组。

样例 1

输入

5
5
2
3
1
4
1
4
3
5
2

输出

2
5
2

样例 2

输入

3
1
2
3
1
2
3

输出

3
3
4
2
3
4
3
2

数据范围与提示

对于全部数据,1n5×1041 \le n \le 5 \times 10^41ain1 \le a_i \le n