#pragma GCC optimize "O3,omit-frame-pointer,inline" #pragma GCC push_options #pragma GCC optimize ("unroll-loops") #define _USE_MATH_DEFINES #include using namespace std; struct Segment { int l, r; Segment(int l, int r) : l(l), r(r) {} bool operator < (const Segment &s) const { int len = (r - l) % 2 == 1 ? (r - l - 1) / 2 : (r - l) / 2; int len_s = (s.r - s.l) % 2 == 1 ? (s.r - s.l - 1) / 2 : (s.r - s.l) / 2; if (len != len_s) return len < len_s; return l > s.l; } }; signed main () { std::ios::sync_with_stdio(false); std::cin.tie(0); int t; cin >> t; while (t--) { // cerr << "t = " << t << endl; int n, m; cin >> n >> m; priority_queue pq; vector ans(n + 1); ans[m] = 1; pq.emplace(-m + 2, m); pq.emplace(m, n + n - m); for (int i = 2; i <= n; i++) { auto [l, r] = pq.top(); pq.pop(); int mid = (l + r) / 2; while (mid < 1 || mid > n || ans[mid]) { l = pq.top().l; r = pq.top().r; pq.pop(); mid = (l + r) / 2; } // cerr << "i = " << i << " l = " << l << " r = " << r << " mid = " << mid << endl; ans[mid] = i; pq.emplace(l, mid); pq.emplace(mid, r); } for (int i = 1; i <= n; i++) { cout << ans[i] << " \n"[i == n]; } } return 0; }