1. 程式人生 > >樹狀數組基礎

樹狀數組基礎

sum 節點 date 更新 葉子 owb while pre lowbit

int lowbit(int i)
{
    return i & -i;//或者是return i-(i&(i-1));表示求數組下標二進制的非0最低位所表示的值
}
void update(int i,int val)//單點更新
{
    while(i<=n){
        C[i]+=val;
        i+=lowbit(i);//由葉子節點向上更新樹狀數組C,從左往右更新
    }
}
int sum(int i)//求區間[1,i]內所有元素的和
{
    int ret=0;
    while(i>0){
        ret+=C[i];//從右往左累加求和
i-=lowbit(i); } return ret; }

樹狀數組基礎