新增指针节点时注意
以下面指针版主席树部分代码为例
在新增一个指针节点时,
不能只 node *neww,这样可能新增节点的地址与其他的地址重复
比如build 函数里,如果node neww ,那么neww的地址就会与pre的地址重复
所以要node * neww=new node()
或者是 node * neww=(node * )malloc (sizeof(node))
#include<cstdio> #include<algorithm> #define N 100001 using namespace std; int n,m,a[N],hash[N]; int tot,cnt; struct node { node * l,* r; int sum; }; node * root[N]; inline node * build(node * pre,int l,int r,int w) { node *neww=new node(); //node * neww=(node *)malloc(sizeof(node)); neww->sum=pre->sum+1; if(l==r) return neww; int mid=l+r>>1; if(w<=mid) { neww->r=pre->r; neww->l=build(pre->l,l,mid,w); } else { neww->l=pre->l; neww->r=build(pre->r,mid+1,r,w); } return neww; } node * null(int ll,int rr) { node *neww=new node(); //node * neww=(node *)malloc(sizeof(node)); neww->l=neww->r=NULL; neww->sum=0; if(ll==rr) return neww; int mid=ll+rr>>1; neww->l=null(ll,mid); neww->r=null(mid+1,rr); return neww; }