樹狀數組

來源:互聯網
上載者:User

標籤:family   偶數   開始   如何   cpp   modify   font   負數   修改   

 

樹狀數組的作用 :

  修改某點的值 , 查詢某段區間的和 , 這是樹狀數組的強項 。其區間查詢的和 為 lg n 。

 

之所以叫樹狀數組 , 大概就是因為他對資料的操作看起來像一顆樹吧 。

 

樹狀數組有核心的一步 : (追溯其父節點或下轄第一個沒有關係的點)

int lowbit(int k){    return k & (-k);}

補充一點 : 如何求一個負數的二進位碼 ?

  一個數加一個負號,就是把這個數的二進位碼取反加一

 例如: -10的二進位就是-1010=0101+1=0110

 然後就會發現一個規律 : 奇數如果執行此操作 最後會返回 1 , 但如果是偶數執行此操作 , 得到的數是 偶數從最後一位 開始向前截取 直到有一位為 1 。

 

樹狀數組的更新 // 最終得到的數組是 c 數組

 

void modify(int k, int add){    while(k <= Maxn){        c[k] += add;        k += lowbit(k);    }}

 

 

樹狀數組的區間求和

  

int get_sum(int x){    int ans = 0;    while (x != 0){        ans += c[x];        x -= lowbit(x);    }    return ans;}

 

樹狀數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.