
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 50005long long n, m;long long f[maxn];bool vis[maxn];int ar[maxn];void work(){ memset(vis, 0, sizeof(vis)); int x = n *(n -1) /2- m; int p =-1; for (int i =0; i < n; i++) { if (x >= n - i -1) { f[i] = i +1; x -= n - i -1; vis[f[i]] =true; }else { p = i; break; } } if (p ==-1) return; f[p] = n - x; vis[f[p]] =true; int s = n; for (int i = p +1; i < n; i++) { while (vis[s]) s--; vis[s] =true; f[i] = s; }}void print(){ printf("%lld", f[0]); for (int i =1; i < n; i++) printf(" %lld", f[i]); putchar('n');}int main(){ while (scanf("%lld%lld", &n, &m), !(n ==-1&& m ==-1)) { work(); print(); } return 0;}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)