我有两种写法,但是总是莫名其妙wa,请问一下那个是正确的。
int qj_ask(int al,int ar,int k)
{
if(tree[k].l>=al&&tree[k].r<=ar)
{
return tree[k].sum;
}
int mid=tree[k].l+tree[k].r>>1;
if(ar<=mid)
return qj_ask(al,ar,k<<1);
if(al>mid)
return qj_ask(al,ar,k<<1|1);
return qj_ask(al,ar,k<<1)+qj_ask(al,ar,k<<1|1);
}
void sum(int k)
{
if(tree[k].l>=al&&tree[k].r<=ar)
{
ans+=tree[k].w;
return;
}
int m=(tree[k].l+tree[k].r)>>1 if(x<=m) sum(k<<1);
if(y>m) sum(k<<1|1);
}