int read(int k)
{
int sum=0;
while (k>0)
{
sum+=tree[k];
k-=k&-k;
}
return sum;
}
void update(int k,int v)
{
while (k<=Max)
{
tree[k]+=v;
k+=k&-k;
}
}
int find(int k)
{
int idx=0;
for (int i=20;i>=0;i--)
{
idx|=1<<i;
if (idx<=Max&&tree[idx]<k)
k-=tree[idx];
else
idx^=1<<i;
}
return idx+1;
}
树状数组,很强大。
最新推荐文章于 2022-12-20 11:05:05 发布