#include<bits/stdc++.h>
using namespace std;
struct Tree{
int tot=0,rt=0;
struct tp{
int ls,rs,sum;
};
vector<tp> t={{0,0,0}};
void pushup(int o){
t[o].sum=t[ t[o].ls ].sum+t[ t[o].rs ].sum;
}
void ins(int &o,int l,int r,int st,int val){
if(!o) {
t.push_back({0,0,0});
o=++tot;
}
if(l==r){
t[o].sum+=val;
cout<<o<<" "<<l<<" "<<r<<" "<<t[o].sum<<"\n";
return;
}
int mid=l+r>>1;
if(st<=mid) ins(t[o].ls,l,mid,st,val);
else ins(t[o].rs,mid+1,r,st,val);
pushup(o);
cout<<o<<" "<<t[o].ls<<" "<<t[o].rs<<" "<<l<<" "<<r<<" "<<t[o].sum<<"\n";
}
};
int main(){
Tree a;
a.ins(a.rt,1,100000,1,1);
return 0;
}
按照以上代码运行,会出现部分o所对应的t[o].ls未被赋值。但如果将t.push_back({0,0,0});和o=++tot的位置互换,t[o].ls就能被正常赋值。
为什么呀,QAQ