#include <bits/stdc++.h>
using namespace std;
struct Node {
Node *lpt, *rpt;
vector<int> B;
Node() : lpt(nullptr), rpt(nullptr) {}
Node (int* from, int* to, int low, int high) {
if (low == high || from >= to) return;
int mid = (low + high) / 2;
function<bool(int)> f = [mid] (int x) {
return x <= mid;
};
B.reserve(to - from + 1);
B.push_back(0);
for (auto it = from; it != to; it++)
B.push_back(B.back() + f(*it));
auto pivot = stable_partition(from, to, f);
if (from < pivot) lpt = new Node(from, pivot, low, mid);
if (pivot < to) rpt = new Node(pivot, to, mid + 1, high);
}
int kthSmallest (int l, int r, int k, int low, int high) {
if (l > r) return 0;
if (low == high) return low;
int cntLeft = B[r] - B[l - 1], mid = (low + high) / 2;
if (k <= cntLeft)
return lpt->kthSmallest(B[l - 1] + 1, B[r], k, low, mid);
return rpt->kthSmallest(l - B[l - 1], r - B[r], k - cntLeft, mid + 1, high);
}
int countEqualK (int l, int r, int K, int low, int high) {
if (l > r || K < low || K > high) return 0;
if (low == high) return r - l + 1;
int mid = (low + high) / 2;
if (K <= mid) return (lpt ? lpt->countEqualK(B[l - 1] + 1, B[r], K, low, mid) : 0);
return (rpt ? rpt->countEqualK(l - B[l - 1], r - B[r], K, mid + 1, high) : 0);
}
int countLEQ (int l, int r, int K, int low, int high) {
if (l > r || K < low) return 0;
if (high <= K) return r - l + 1;
int cntLeft = B[r] - B[l - 1], mid = (low + high) / 2;
if (K <= mid) return (lpt ? lpt->countLEQ(B[l - 1] + 1, B[r], K, low, mid) : 0);
return cntLeft + (rpt ? rpt->countLEQ(l - B[l - 1], r - B[r], K, mid + 1, high) : 0);
}
};
template <int MIN, int MAX>
struct WaveletTree {
Node* root;
WaveletTree() : root(nullptr) {}
WaveletTree (int* from, int* to) : root(new Node(from, to, MIN, MAX)) {}
int kthSmallest (int l, int r, int k) {
return root->kthSmallest(l, r, k, MIN, MAX);
}
int countEqualK (int l, int r, int K) {
return root->countEqualK(l, r, K, MIN, MAX);
}
int countLEQ (int l, int r, int K) {
return root->countLEQ(l, r, K, MIN, MAX);
}
};
int main() {
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9kZSB7CiAgICBOb2RlICpscHQsICpycHQ7CiAgICB2ZWN0b3I8aW50PiBCOwoKICAgIE5vZGUoKSA6IGxwdChudWxscHRyKSwgcnB0KG51bGxwdHIpIHt9CgogICAgTm9kZSAoaW50KiBmcm9tLCBpbnQqIHRvLCBpbnQgbG93LCBpbnQgaGlnaCkgewogICAgICAgIGlmIChsb3cgPT0gaGlnaCB8fCBmcm9tID49IHRvKSByZXR1cm47CiAgICAgICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CiAgICAgICAgZnVuY3Rpb248Ym9vbChpbnQpPiBmID0gW21pZF0gKGludCB4KSB7CiAgICAgICAgICAgIHJldHVybiB4IDw9IG1pZDsKICAgICAgICB9OwoKICAgICAgICBCLnJlc2VydmUodG8gLSBmcm9tICsgMSk7CiAgICAgICAgQi5wdXNoX2JhY2soMCk7CiAgICAgICAgZm9yIChhdXRvIGl0ID0gZnJvbTsgaXQgIT0gdG87IGl0KyspCiAgICAgICAgICAgIEIucHVzaF9iYWNrKEIuYmFjaygpICsgZigqaXQpKTsKCiAgICAgICAgYXV0byBwaXZvdCA9IHN0YWJsZV9wYXJ0aXRpb24oZnJvbSwgdG8sIGYpOwoKICAgICAgICBpZiAoZnJvbSA8IHBpdm90KSBscHQgPSBuZXcgTm9kZShmcm9tLCBwaXZvdCwgbG93LCBtaWQpOwogICAgICAgIGlmIChwaXZvdCA8IHRvKSBycHQgPSBuZXcgTm9kZShwaXZvdCwgdG8sIG1pZCArIDEsIGhpZ2gpOwogICAgfQoKICAgIGludCBrdGhTbWFsbGVzdCAoaW50IGwsIGludCByLCBpbnQgaywgaW50IGxvdywgaW50IGhpZ2gpIHsKICAgICAgICBpZiAobCA+IHIpIHJldHVybiAwOwogICAgICAgIGlmIChsb3cgPT0gaGlnaCkgcmV0dXJuIGxvdzsKICAgICAgICBpbnQgY250TGVmdCA9IEJbcl0gLSBCW2wgLSAxXSwgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKICAgICAgICBpZiAoayA8PSBjbnRMZWZ0KQogICAgICAgICAgICByZXR1cm4gbHB0LT5rdGhTbWFsbGVzdChCW2wgLSAxXSArIDEsIEJbcl0sIGssIGxvdywgbWlkKTsKICAgICAgICByZXR1cm4gcnB0LT5rdGhTbWFsbGVzdChsIC0gQltsIC0gMV0sIHIgLSBCW3JdLCBrIC0gY250TGVmdCwgbWlkICsgMSwgaGlnaCk7CiAgICB9CgogICAgaW50IGNvdW50RXF1YWxLIChpbnQgbCwgaW50IHIsIGludCBLLCBpbnQgbG93LCBpbnQgaGlnaCkgewogICAgICAgIGlmIChsID4gciB8fCBLIDwgbG93IHx8IEsgPiBoaWdoKSByZXR1cm4gMDsKICAgICAgICBpZiAobG93ID09IGhpZ2gpIHJldHVybiByIC0gbCArIDE7CiAgICAgICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CiAgICAgICAgaWYgKEsgPD0gbWlkKSByZXR1cm4gKGxwdCA/IGxwdC0+Y291bnRFcXVhbEsoQltsIC0gMV0gKyAxLCBCW3JdLCBLLCBsb3csIG1pZCkgOiAwKTsKICAgICAgICByZXR1cm4gKHJwdCA/IHJwdC0+Y291bnRFcXVhbEsobCAtIEJbbCAtIDFdLCByIC0gQltyXSwgSywgbWlkICsgMSwgaGlnaCkgOiAwKTsKICAgIH0KCiAgICBpbnQgY291bnRMRVEgKGludCBsLCBpbnQgciwgaW50IEssIGludCBsb3csIGludCBoaWdoKSB7CiAgICAgICAgaWYgKGwgPiByIHx8IEsgPCBsb3cpIHJldHVybiAwOwogICAgICAgIGlmIChoaWdoIDw9IEspIHJldHVybiByIC0gbCArIDE7CiAgICAgICAgaW50IGNudExlZnQgPSBCW3JdIC0gQltsIC0gMV0sIG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CiAgICAgICAgaWYgKEsgPD0gbWlkKSByZXR1cm4gKGxwdCA/IGxwdC0+Y291bnRMRVEoQltsIC0gMV0gKyAxLCBCW3JdLCBLLCBsb3csIG1pZCkgOiAwKTsKICAgICAgICByZXR1cm4gY250TGVmdCArIChycHQgPyBycHQtPmNvdW50TEVRKGwgLSBCW2wgLSAxXSwgciAtIEJbcl0sIEssIG1pZCArIDEsIGhpZ2gpIDogMCk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8aW50IE1JTiwgaW50IE1BWD4Kc3RydWN0IFdhdmVsZXRUcmVlIHsKICAgIE5vZGUqIHJvb3Q7CgogICAgV2F2ZWxldFRyZWUoKSA6IHJvb3QobnVsbHB0cikge30KICAgIFdhdmVsZXRUcmVlIChpbnQqIGZyb20sIGludCogdG8pIDogcm9vdChuZXcgTm9kZShmcm9tLCB0bywgTUlOLCBNQVgpKSB7fQoKICAgIGludCBrdGhTbWFsbGVzdCAoaW50IGwsIGludCByLCBpbnQgaykgewogICAgICAgIHJldHVybiByb290LT5rdGhTbWFsbGVzdChsLCByLCBrLCBNSU4sIE1BWCk7CiAgICB9CgogICAgaW50IGNvdW50RXF1YWxLIChpbnQgbCwgaW50IHIsIGludCBLKSB7CiAgICAgICAgcmV0dXJuIHJvb3QtPmNvdW50RXF1YWxLKGwsIHIsIEssIE1JTiwgTUFYKTsKICAgIH0KCiAgICBpbnQgY291bnRMRVEgKGludCBsLCBpbnQgciwgaW50IEspIHsKICAgICAgICByZXR1cm4gcm9vdC0+Y291bnRMRVEobCwgciwgSywgTUlOLCBNQVgpOwogICAgfQp9OwoKaW50IG1haW4oKSB7CglyZXR1cm4gMDsKfQ==