真的求求了,被卡了好久了
#include <iostream>
#include <cstring>
#include <cstdio>
#define ll long long
const int N = 1e5 + 7;
using namespace std;
int T, n;
ll a, b;
ll ans[N];
inline ll sum(int l, int r) {
ll tmp = 0;
for (int i = l; i <= r; ++ i) tmp += ans[i];
return tmp;
}
inline void print(int n, ll tmp1, ll tmp2) {
if (tmp1 < tmp2) {
for (int i = 1; i <= n; ++ i)
printf("%lld ", ans[i]);
} else {
for (int i = n; i >= 1; -- i)
printf("%lld ", ans[i]);
}
printf("\n");
}
int main() {
scanf("%d", &T);
while (T --) {
memset(ans, 0, sizeof(ans));
scanf("%d %lld %lld", &n, &a, &b);
ll tmp1 = a, tmp2 = b;
if (a > b) swap(a, b);
for (int i = 1; i <= n; ++ i) ans[i] = i;
ll sum1 = sum(1, n >> 1), sum2 = sum((n >> 1) + 1, n);
if (sum2 < b) {printf("-1\n"); continue;}
if (sum1 >= a && sum2 >= b) {print(n, tmp1, tmp2); continue;}
int posl = 0, posr = 0;
ll cha1 = a - sum1, cha2 = sum2 - b;
if (cha1 > cha2) {printf("-1\n"); continue;}
ll lp = 1, rp = n;
while (lp <= (n >> 1) && rp >= (n >> 1) + 1) {
if (lp + cha1 > rp) {
swap(ans[lp], ans[rp]);
cha1 = cha1 - (ans[rp] - ans[lp]);
} else {
posl = lp, posr = rp;
break;
}
lp ++, rp --;
}
if (posl + cha1 <= (n >> 1) && cha1) {
if (posr - cha1 <= (n >> 1))
swap(ans[posr - cha1], ans[posr]);
else
swap(ans[n >> 1], ans[(n >> 1) + cha1]);
print(n, tmp1, tmp2);
continue;
}
swap(ans[posl], ans[posl + cha1]);
print(n, tmp1, tmp2);
}
return 0;
}