セグ木を木構造のまま出力する
そのまま配列を出力しても見難いので作った
struct K { int l, r, h, k; }; void SegTree::out() { int t = 0, kn = 1; while(n > kn) { kn *= 2; t++; } int h[t + 1] = {0, 1}; rep(i, 2, t + 1) h[i] = h[i - 1] * 2 + 1; queue<K> q; K k = {0, n, 1, 0}; q.push(k); while(!q.empty()) { queue<K> nq; K pp = q.front(); if(pp.k > n) break; rep(i, 0, h[t]) cout << " "; while(!q.empty()) { K p = q.front(); q.pop(); cout << dat[p.k]; if(t > 0) rep(i, 0, h[t + 1]) cout << " "; else cout << " "; K lk = {p.l, (p.l + p.r) / 2, p.h * 2, p.k * 2 + 1}; K rk = {(p.l + p.r) / 2, p.r, p.h * 2, p.k * 2 + 2}; nq.push(lk); nq.push(rk); } t--; cout << endl; q = nq; } }
こんな感じに出力できる
テストケース程度なら問題なさそう?