MLE 求助
查看原帖
MLE 求助
416959
alexbear103楼主2022/2/15 14:56
#include <bits/stdc++.h>
#define inf 2147483647
using namespace std;
const int maxn = 1e4 + 5;
struct treenode {
	int val, lc, rc, cnt, siz;
} tree[maxn];
int q, tsiz, frt = -inf, bck = inf;
void insert(int x, int u) {
	tree[u].siz++;
	if (tree[u].val == x) tree[u].cnt++;
	if (tree[u].val < x) {
		if (tree[u].rc) {
			insert(x, tree[u].rc);
		} else {
			tree[++tsiz].val = x;
			tree[u].rc = tsiz;
			tree[tsiz].cnt = tree[tsiz].siz = 1;
		}
	} else {
		if (tree[u].lc) {
			insert(x, tree[u].lc);
		} else {
			tree[++tsiz].val = x;
			tree[u].lc = tsiz;
			tree[tsiz].cnt = tree[tsiz].siz = 1;
		}
	}
}
inline int qrk(int x, int u) {
	if (x == 0) return 1;
	if (tree[u].val == x) {
		return tree[tree[u].lc].siz;
	} else if (tree[u].val > x) {
		return qrk(x, tree[u].lc);
	} else {
		return tree[tree[u].lc].siz + tree[u].cnt + qrk(x, tree[u].rc);
	}
}
inline int qv(int rk, int u) {
	if (tree[tree[u].lc].siz >= rk) {
		return qv(rk, tree[u].lc);
	} else if (tree[tree[u].lc].siz + tree[u].cnt >= rk) {
		return tree[u].val;
	} else {
		return qv(rk - tree[tree[u].lc].siz - tree[u].cnt, tree[u].rc);
	}
}
inline int qfrt(int x, int u) {
	if (!x) return -inf;
	if (tree[u].val >= x) {
		if (tree[u].lc) {
			qfrt(x, tree[u].lc);
		}
	} else {
		frt = max(frt, tree[u].val);
		if (tree[u].rc) {
			qfrt(x, tree[u].rc);
		}
	}
}
inline int qbck(int x, int u) {
	if (tree[u].val <= x) {
		if (tree[u].rc) {
			qbck(x, tree[u].rc);
		}
	} else {
		bck = min(bck, tree[u].val);
		if (tree[u].lc) {
			qbck(x, tree[u].lc);
		}
	}
}
signed main() {
	cin >> q;
	while (q--) {
		int op, x; cin >> op >> x;
		if (op == 5) {
			if (tsiz == 0) {
				tree[++tsiz].val = x;
				tree[tsiz].cnt = tree[tsiz].siz = 1;
			} else {
				insert(x, 1);
			}
		} else if (op == 1) {
			cout << qrk(x, 1) + 1 << endl;
		} else if (op == 2) {
			cout << qv(x, 1) << endl;
		} else if (op == 3) {
			frt = -inf;
			qfrt(x, 1);
			cout << frt << endl;
		} else {
			bck = inf;
			qbck(x, 1);
			cout << bck << endl;
		}
	} 
	return 0;
}

2022/2/15 14:56
加载中...