結果
| 問題 |
No.566 だいたい完全二分木
|
| コンテスト | |
| ユーザー |
tubo28
|
| 提出日時 | 2017-09-08 23:32:07 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,478 bytes |
| コンパイル時間 | 1,769 ms |
| コンパイル使用メモリ | 168,884 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-07 06:53:35 |
| 合計ジャッジ時間 | 2,971 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 WA * 2 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using key_type = int;
enum { L, R };
struct node {
key_type key;
node *ch[2];
int size;
static node *const nil;
node() : node(0) {}
node(const key_type &x) : key(x), size(1) { ch[L] = ch[R] = node::nil; }
node(node *left_, node *right_, int key_, int size_)
: key(key_), size(size_) {
ch[L] = left_;
ch[R] = right_;
}
};
node *const node::nil = new node(nullptr, nullptr, -1, 0);
auto nil = node::nil;
using np = node *;
np update(np n) {
n->size = n->ch[L]->size + n->ch[R]->size;
return n;
}
template <int dir> np rotate(np n) {
np par = n->ch[1 - dir];
n->ch[1 - dir] = par->ch[dir];
par->ch[dir] = update(n);
return update(par);
}
np make(int l, int r) {
if (l == r) {
return nil;
}
int m = (l + r) / 2;
np n = new node(m);
n->ch[L] = make(l, m);
n->ch[R] = make(m + 1, r);
return update(n);
}
string ans;
void show(np n) {
if (n == nil) return;
ans += to_string(n->key) + " ";
show(n->ch[L]);
show(n->ch[R]);
}
int main() {
int k;
while (cin >> k) {
ans = "";
if (k == 2) {
ans = "1 2 3";
} else if (k == 3) {
ans = "5 3 2 4 1 6 7";
} else {
np root = make(1, 1 << k);
root = rotate<L>(root);
show(root);
ans.pop_back();
cout << ans << endl;
}
}
}
tubo28