rt. 为啥一运行就直接 RE?
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 5;
template<class Tp, Tp INF1, Tp INF2 = -INF1>
class Bst {
private:
struct Node {
int l, r;
Tp v;
} a[N];
int t = 0, rt = 1;
int add(Tp v) {
cout<<"add("<<v<<")..."<<endl;
a[++t].v = v;
return t;
}
int finding(Tp v, int p) {
if(!p) return 0;
else if(a[p].v == v) return p;
else if(a[p].v > v) return finding(v, a[p].l);
else return finding(v, a[p].r);
}
int inserting(Tp v, int &p) {
if(!p) {
p = add(v);
return p;
} else if(a[p].v == v) return -1;
else if(a[p].v > v) return inserting(v, a[p].l);
else return inserting(v, a[p].r);
}
public:
void init() {
cout<<"init()..."<<endl;
add(INF2);
add(INF1);
a[1].r = 2;
}
int find(Tp v) {
finding(v, rt);
}
int insert(Tp v) {
inserting(v, rt);
}
};
signed main() {
cout<<"start"<<endl;
Bst<int, N, -N> b;
cout<<"done"<<endl;
b.init();
while(1) {
int op, x;
cin>>op>>x;
if(op == 1) cout<<b.find(x)<<endl;
else cout<<b.insert(x)<<endl;
}
return 0;
}