【TOJ 1180】Inversion【贪心】

来源:互联网 发布:万网域名登录 编辑:程序博客网 时间:2024/05/21 11:06

题意:给n m,求一个字典序最小的序列使得逆序对等于m

思路:因为是字典序最小,所以尽量使得数字小的排在前面,通过统计下k个数字能最大构成的逆序对,然后就可以求出答案。

#include <cstdio>#define N 50004int ans[N];int main() {    long long n, m;    int i, j;    while (scanf("%lld%lld", &n, &m), n != -1) {        ans[0] = 0;        for (i = 1;i*1ll*(i-1)/2<m;i++);        for (j = 1;j <= n-i;j++) ans[++ans[0]] = j;        j = n-(i*1ll*(i-1)/2-m);        ans[++ans[0]] = j;        for (i = n;ans[0]<n;i--) {            if (i != j) ans[++ans[0]] = i;        }        for (i = 0;i < n;i++) {            if (i) printf(" ");            printf("%d", ans[i+1]);        }        puts("");    }}


0 0
原创粉丝点击