这是一份不怎么特殊的动态开点线段树代码,唯一的不同是我需要给好多棵动态开点线段树分配空间,因此我选择了 vector,然而我进行了一次普通的单点加操作,导致了RE,发现了是在第二层递归时新开的点 u 变成了随机值(?,但是不知道为啥,求教
vector<int>t[(int)(1e5+10)],l[(int)(1e5+10)],r[(int)(1e5+10)];
int root[(int)(1e5+10)];
void add(int id,int &u,int st,int ed,int x,int k)
{
cout<<u<<"\n";
if(!u)
{
u=++root[id];
t[id].push_back(0);
l[id].push_back(0);
r[id].push_back(0);
cout<<u<<"\n";
}
if(st==ed)
{
t[id][u]+=k;
return ;
}
int mid=(st+ed)>>1;cout<<u<<"\n";
if(mid>=x) add(id,l[id][u],st,mid,x,k);
else add(id,r[id][u],mid+1,ed,x,k);
cout<<l[id][u];
t[id][u]=t[id][l[id][u]]+t[id][r[id][u]];
}