主函数部分:
mian() {
Treap T (1e5);
int n, Min, num, sum = 0;
char opt;
read (n, Min);
int TOT = 0, TOTA = 0;
while(n--) {
cin >> opt >> num;
if (opt == 'I') {
if (num - sum >= Min) {
T.Insert (num - sum);
TOT++;
TOTA++;
}
} elif (opt == 'A') {
Min -= num;
sum += num;
} elif (opt == 'S') {
Min += num;
sum -= num;
int a1 = Min - 1, a2;
while (T.GP (a1) != -INF) {
a2 = a1;
a1 = T.GP (a1);
T.Remove (T.GP (a2));
TOT--;
}
} elif (opt == 'F') {
if (TOT < num) printf ("-1\n");
else {
printf ("%d\n",
T.GN (TOT - num + 2) + sum);
}
}
}
printf ("%d\n", TOTA - TOT);
}
其中 mian 是因为我在最前面 define 了,所以没问题。
然后,GN 是 GetNum,GR 是 GetRank,GP 是 GetPre,GN 是 GetNext,Insert 和 Remove 就是插入和删除。
前面的平衡树我写进了一个 Class 里,能过板子,认为没问题。主程序是一个同学的思路,我和同学差不多写的是一样的,但是我爆零了,他满分,我很不理解。
如需,这里是全部代码。
万分感谢。