本蒟蒻的代码如下:
#include <bits/stdc++.h>
#define putb putchar(' ')
#define putn putchar('\n')
using namespace std;
const int MAXN = 1e6 * 3 + 10;
int n, cnt = 1, root = 1;
struct Node
{
int val;
int ls, rs;
} tr[MAXN];
template <typename _Ip>
inline void read(_Ip &x)
{
char ch = getchar(), sgn = 0; x = 0;
while (ch ^ '-' && !isdigit(ch)) ch = getchar();
if (ch == '-') ch = getchar(), sgn = 1;
while (isdigit(ch)) x = (x<<3)+(x<<1) + (ch^48), ch = getchar();
if (sgn) x = -x;
}
template <typename _Op>
inline void write(_Op x)
{
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
inline void push_up(int p)
{
tr[p].val = tr[tr[p].ls].val + tr[tr[p].rs].val;
}
inline void change(int &rot, int l, int r, int p, int v)
{
if (!rot) rot = ++cnt;
if (l == r)
{
tr[p].val += v;
return;
}
int mid = (l+r) >> 1;
if (p <= mid) change(tr[p].ls, l, mid, p, v);
else change(tr[p].rs, mid+1, r, p, v);
push_up(p);
}
inline int query(int p, int l, int r, int pl, int pr)
{
if (!p) return 0;
if (pl <= l && r <= pr)
{
return tr[p].val;
}
int mid = (l+r) >> 1, ans = 0;
if (pl <= mid) ans += query(tr[p].ls, l, mid, pl, pr);
if (mid < pr) ans += query(tr[p].rs, mid+1, r, pl, pr);
return ans;
}
inline int kth(int p, int l, int r, int v)
{
if (!p) return -1;
if (l == r)
{
return l;
}
int mid = (l+r) >> 1;
if (v <= tr[tr[p].ls].val) return kth(tr[p].ls, l, mid, v);
else return kth(tr[p].rs, mid+1, r, v);
}
inline int pre(int x)
{
int temp = query(1, -1e7, 1e7, -1e7, x-1);
return kth(1, -1e7, 1e7, temp);
}
inline int next(int x)
{
int temp = query(1, -1e7, 1e7, -1e7, x) + 1;
return kth(1, -1e7, 1e7, temp);
}
int main()
{
read(n);
for (int i = 1, op, x; i <= n; ++i)
{
read(op);read(x);
//write(op);putb;write(x);putn;
if (op == 1) {change(root, -1e7, 1e7, x, 1);}
else if (op == 2) {change(root, -1e7, 1e7, x, -1);}
else if (op == 3) {write(query(1, -1e7, 1e7, -1e7, x-1)+1);putn;}
else if (op == 4) {write(kth(1, -1e7, 1e7, x));putn;}
else if (op == 5) {write(pre(x));putn;}
else if (op == 6) {write(next(x));putn;}
}
return 0;
}
平衡树的模板题怎么能用平衡树做呢?