问题:
这道题可以用线段树来做,首先建树,假设每个女生拥有的花的数量如下图
我们觉得2号女生没有花好可怜啊,于是我们给她加一枝花,就从节点开始,找到2,+1,那么【1,2】,【1,4】也要+1;
伪代码
void build(int p,int l,int r)
{
if(l==r)
{
tree[p]=a[l];return ;
}
int mid=(l+r)/2;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
tree[p]=tree[p*2]+tree[p*2+1];
}
void change(int p,int l,int r,int x,int num)
{
if(l==r) {tree[p]+=num;return ;}
int mid=(l+r)/2;
if(x<=mid) change(p*2,l,r,x,num);
else change(p*2+1,mid+1,r,x,num);
tree[p]=tree[p*2]+tree[p*2+1];
}
int find(int p,int l,int r,int x,int y)
{
if(x<=1&&r<=y)
return tree[p];
int mid=(l+r)/2;
if(y<=mid) return finf(p*2,l,mid,x,y);
if(x>mid) return find(p*2+1,mid+1,r,x,y);
return (find(p*2,l,mid,x,mid)+find(p*2+1,mid+1,r,mid+1,y));
}