#include<iostream>
using namespace std;
#define ll long long
ll seed = 89698687;
int my_rand() {
seed = seed * 1234567 + 3256236;
return (unsigned int)(seed >> 16) & 0x7fffffff;
}
struct Node {
ll data, priority;
int size, cnt;
Node *left, *right;
};
Node pool[1000005];
int pool_size = 0;
Node *create(ll x) {
Node *res = pool + pool_size++;
res->data = x, res->size = res->cnt = 1, res->priority = my_rand() % 100, res->left = res->right = 0;
return res;
}
int getSize(Node *node) {
return node ? node->size : 0;
}
void upd_size(Node *node) {
if(node) node->size = node->cnt + getSize(node->left) + getSize(node->right);
}
Node *leftRotate(Node *node) {
Node *a = node->right, *b = a->left;
a->left = node;
node->right = b;
a->size = node->size;
upd_size(node);
return a;
}
Node *rightRotate(Node *node) {
Node *a = node->left, *b = a->right;
a->right = node;
node->left = b;
a->size = node->size;
upd_size(node);
return a;
}
Node *tmp, *root = 0;
Node *add(Node *node, ll x) {
if(!node) return create(x);
if(x < node->data) {
node->left = add(node->left, x);
if(node->left->priority > node->priority) node = rightRotate(node);
}
else if(x > node->data) {
node->right = add(node->right, x);
if(node->right->priority > node->priority) node = leftRotate(node);
}
else node->cnt++;
upd_size(node);
return node;
}
Node *getNode(ll x) {
Node *cur = root;
while(cur) {
if(cur->data == x) return cur;
if(x < cur->data) cur = cur->left;
else cur = cur->right;
}
return 0;
}
Node *select(Node *node, int k) {
if(!node) return 0;
int t = getSize(node->left);
if(k < t) return node->left ? select(node->left, k) : node;
else {
if(k - t < node->cnt) return node;
return node->right ? select(node->right, k - t - node->cnt) : node;
}
return node;
}
void printTree(Node *node) {
if(!node) return;
printTree(node->left);
for(int i = 0; i < node->cnt; ++i) cout << node->data << ' ';
printTree(node->right);
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
// freopen("input.txt", "r", stdin);
int n, x; cin >> n;
for(int i = 0; i < n; ++i) {
cin >> x;
root = add(root, x);
tmp = select(root, i / 2);
cout << tmp->data << ' ';
}
cout << '\n';
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCgpsbCBzZWVkID0gODk2OTg2ODc7CgppbnQgbXlfcmFuZCgpIHsKCXNlZWQgPSBzZWVkICogMTIzNDU2NyArIDMyNTYyMzY7CglyZXR1cm4gKHVuc2lnbmVkIGludCkoc2VlZCA+PiAxNikgJiAweDdmZmZmZmZmOwp9CgpzdHJ1Y3QgTm9kZSB7CglsbCBkYXRhLCBwcmlvcml0eTsKCWludCBzaXplLCBjbnQ7CglOb2RlICpsZWZ0LCAqcmlnaHQ7Cn07CgpOb2RlIHBvb2xbMTAwMDAwNV07CmludCBwb29sX3NpemUgPSAwOwoKTm9kZSAqY3JlYXRlKGxsIHgpIHsKCU5vZGUgKnJlcyA9IHBvb2wgKyBwb29sX3NpemUrKzsKCXJlcy0+ZGF0YSA9IHgsIHJlcy0+c2l6ZSA9IHJlcy0+Y250ID0gMSwgcmVzLT5wcmlvcml0eSA9IG15X3JhbmQoKSAlIDEwMCwgcmVzLT5sZWZ0ID0gcmVzLT5yaWdodCA9IDA7CglyZXR1cm4gcmVzOwp9CgppbnQgZ2V0U2l6ZShOb2RlICpub2RlKSB7CglyZXR1cm4gbm9kZSA/IG5vZGUtPnNpemUgOiAwOwp9Cgp2b2lkIHVwZF9zaXplKE5vZGUgKm5vZGUpIHsKCWlmKG5vZGUpIG5vZGUtPnNpemUgPSBub2RlLT5jbnQgKyBnZXRTaXplKG5vZGUtPmxlZnQpICsgZ2V0U2l6ZShub2RlLT5yaWdodCk7Cn0KCk5vZGUgKmxlZnRSb3RhdGUoTm9kZSAqbm9kZSkgewoJTm9kZSAqYSA9IG5vZGUtPnJpZ2h0LCAqYiA9IGEtPmxlZnQ7CglhLT5sZWZ0ID0gbm9kZTsKCW5vZGUtPnJpZ2h0ID0gYjsKCWEtPnNpemUgPSBub2RlLT5zaXplOwoJdXBkX3NpemUobm9kZSk7CglyZXR1cm4gYTsKfQoKTm9kZSAqcmlnaHRSb3RhdGUoTm9kZSAqbm9kZSkgewoJTm9kZSAqYSA9IG5vZGUtPmxlZnQsICpiID0gYS0+cmlnaHQ7CglhLT5yaWdodCA9IG5vZGU7Cglub2RlLT5sZWZ0ID0gYjsKCWEtPnNpemUgPSBub2RlLT5zaXplOwoJdXBkX3NpemUobm9kZSk7CglyZXR1cm4gYTsKfQoKTm9kZSAqdG1wLCAqcm9vdCA9IDA7CgpOb2RlICphZGQoTm9kZSAqbm9kZSwgbGwgeCkgewoJaWYoIW5vZGUpIHJldHVybiBjcmVhdGUoeCk7CglpZih4IDwgbm9kZS0+ZGF0YSkgewoJCW5vZGUtPmxlZnQgPSBhZGQobm9kZS0+bGVmdCwgeCk7CgkJaWYobm9kZS0+bGVmdC0+cHJpb3JpdHkgPiBub2RlLT5wcmlvcml0eSkgbm9kZSA9IHJpZ2h0Um90YXRlKG5vZGUpOwoJfQoJZWxzZSBpZih4ID4gbm9kZS0+ZGF0YSkgewoJCW5vZGUtPnJpZ2h0ID0gYWRkKG5vZGUtPnJpZ2h0LCB4KTsKCQlpZihub2RlLT5yaWdodC0+cHJpb3JpdHkgPiBub2RlLT5wcmlvcml0eSkgbm9kZSA9IGxlZnRSb3RhdGUobm9kZSk7Cgl9CgllbHNlIG5vZGUtPmNudCsrOwoJdXBkX3NpemUobm9kZSk7CglyZXR1cm4gbm9kZTsKfQoKTm9kZSAqZ2V0Tm9kZShsbCB4KSB7CglOb2RlICpjdXIgPSByb290OwoJd2hpbGUoY3VyKSB7CgkJaWYoY3VyLT5kYXRhID09IHgpIHJldHVybiBjdXI7CgkJaWYoeCA8IGN1ci0+ZGF0YSkgY3VyID0gY3VyLT5sZWZ0OwoJCWVsc2UgY3VyID0gY3VyLT5yaWdodDsKCX0KCXJldHVybiAwOwp9CgpOb2RlICpzZWxlY3QoTm9kZSAqbm9kZSwgaW50IGspIHsKCWlmKCFub2RlKSByZXR1cm4gMDsKCWludCB0ID0gZ2V0U2l6ZShub2RlLT5sZWZ0KTsKCWlmKGsgPCB0KSByZXR1cm4gbm9kZS0+bGVmdCA/IHNlbGVjdChub2RlLT5sZWZ0LCBrKSA6IG5vZGU7CgllbHNlIHsKCQlpZihrIC0gdCA8IG5vZGUtPmNudCkgcmV0dXJuIG5vZGU7CgkJcmV0dXJuIG5vZGUtPnJpZ2h0ID8gc2VsZWN0KG5vZGUtPnJpZ2h0LCBrIC0gdCAtIG5vZGUtPmNudCkgOiBub2RlOwoJfQoJcmV0dXJuIG5vZGU7Cn0KCnZvaWQgcHJpbnRUcmVlKE5vZGUgKm5vZGUpIHsKCWlmKCFub2RlKSByZXR1cm47CglwcmludFRyZWUobm9kZS0+bGVmdCk7Cglmb3IoaW50IGkgPSAwOyBpIDwgbm9kZS0+Y250OyArK2kpIGNvdXQgPDwgbm9kZS0+ZGF0YSA8PCAnICc7CglwcmludFRyZWUobm9kZS0+cmlnaHQpOwp9CgppbnQgbWFpbigpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwovLwlmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKCWludCBuLCB4OyBjaW4gPj4gbjsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKCQljaW4gPj4geDsKCQlyb290ID0gYWRkKHJvb3QsIHgpOwoJCXRtcCA9IHNlbGVjdChyb290LCBpIC8gMik7CgkJY291dCA8PCB0bXAtPmRhdGEgPDwgJyAnOwoJfQoJY291dCA8PCAnXG4nOwoJCglyZXR1cm4gMDsKfQoK