思路
核心贪心:在从左到右构造答案时,每一步决定放当前剩余数中 最大 或 最小 的一个。
- 设当前可用的数是区间 L,L+1,…,R(初始 L=1,R=n)。
- 若把 R 放在当前位置,它会与之后剩下的 R−L 个更小的数各形成 1 个逆序对,因此本步能额外贡献 R−L 个逆序对。
- 若把 L 放在当前位置,本步不增加新的逆序对(因为后面剩下的都不小于 L)。
于是每一步贪心选择:
题目内容
对于一个长度为 n 的数组 a= { a1,a2,...,an } ,如果 (i,j) 满足 1≤i<j≤n 且 ai>aj ,则 (i,j) 为逆序对。
牛牛有一个长度为 n 的排列 p= { 1,2,3,...,n } ,现在牛牛想重新排列 p 的顺序使得 p 中恰好包含 k 对逆序对,请你写一个程序帮牛牛解决该问题。
输入描述