逆序数
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\,\,\,\,\,\,\,\,\,已知某个排列 \{x_1, x_2, \dots, x_n\}逆序数为 k ,请你输出 \{x_n, x_{n-1}, \dots, x_1\} 的逆序数。如果有多个不同的答案,按照任意顺序依次输出。

\,\,\,\,\,\,\,\,\,长度为 n排列是由 1 \sim nn 个整数、按任意顺序组成的数组,每个整数恰好出现一次。例如,\{2,3,1,5,4\} 是一个排列,但 \{1,2,2\} 不是一个排列(数组中的 2 出现了两次),\{1,3,4\} 也不是一个排列(长度为 3 但数组中有 4 )。
\,\,\,\,\,\,\,\,\,逆序数指序列中逆序对的数量,即有多少对 (i, j) 满足 i < j 且 x_i > x_j 。

输入描述:

\,\,\,\,\,\,\,\,\,在一行上输入两个整数n, k \left(1 \leq n \leq 10^5;\ 0 \leq k \leq \frac{n \times (n - 1)}{2} \right) 代表排列的长度和原始排列的逆序数。

输出描述:

\,\,\,\,\,\,\,\,\,在一行上输出若干个不同的整数,代表将原始排列逆序后的排列的逆序数。

\,\,\,\,\,\,\,\,\,如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
3 1

输出

复制
2

说明

\,\,\,\,\,\,\,\,\,原始排列可以是 \{1, 3, 2\} ,逆序数为 1 ,满足题意。逆序后的排列为 \{2, 3, 1\} ,逆序数为 2 ;
\,\,\,\,\,\,\,\,\,原始排列也可以是 \{2,1,3\} ,逆序数为 1 ,满足题意。逆序后的排列为 \{3,1,2\} ,逆序数为 2 ;
\,\,\,\,\,\,\,\,\,没有更多的原始排列,去重后只需要输出一个 2 。