#P1070. 栈排序
栈排序
题目描述
你想要借助 个栈将序列 排成非降序。 开始时栈都为空,可以进行3种㨐作:
- : 取出当前 序列的最后一个元素,push 到第 个栈中;
- : pop第 个栈 (需保证不为空),并将栈顶元素插入到输出序列 的末尾;
- : pop 第 个栈 (需保证不为空),并将栈顶元素 push 到第 个栈中;
注意不能把当前 序列的末尾元索直接放到输出序列 中。 睿智的你一下就想到了如果持有的栈的个数 大等于数字总个数 ,那么一定可以完成这项排序工作。 现在请问,完成排序工作最少需要多少个栈,即 的最小值。 接着你需要输出任意一个合法的操作方案,使得输出序列 为非降序。
输入格式
第一行 1 个整数 ,代表有 组数据 每组数据的第一行 1 个整数 ,代表序列长度 第二行 个正整数 ,代表序列中的元索
输出格式
对于每组数据,首先输出一行一个整数 代表最少需要 个栈 第二行输出一个整数 ,代表操作方案有 行。 接下来 行,你需要按以下格式输出操作方案:
- : 重复进行 次 1 操作
- : 进行 1 次 2 操作
- : 重复进行 次操作
对于每组数据,你需要保证 ,操作中 。
请注意本题的输出量较大,请使用快速的输出方式(如printf)。本题使用special judge进行评测,评测比较慢,提交后需要等待一段时间才能有结果
3
3
3 2 1
2
1 1
3
2 3 1
1
6
1 1 1
2 1
1 1 1
2 1
1 1 1
2 1
1
4
1 1 1
1 1 1
2 1
2 1
1
6
1 1 1
2 1
1 1 1
1 1 1
2 1
2 1
数据规模与约定
对于测试点1-3,
对于测试点4-6,
对于测试点7-8,
对于测试点9-10,
对于所有测试点,