生活随笔
收集整理的這篇文章主要介紹了
java 树状数组模板源码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
樹狀數組是一個查詢和修改復雜度都為log(n)的數據結構,將樹狀數組看成一種數據結構,對于一個數組,如果有多次操作,每次的操作有兩種:1、修改數組中某一元素的值,2、求和,求數組元素a[1]+a[2]+…a[num]的和,這是樹狀數組最基本的應用了。
?? const?int?maxn?=?1050;?? int?c[maxn][maxn];?? int?n;?? int?lowbit(int?x)?{?? ????return?x&(-x);?? }?? ?? void?add(int?x,?int?y,?int?val)?{?? ????int?i=y;?? ????while?(x<=n)?{?? ????????y=i;?? ????????while?(y<=n)?{?? ????????????c[x][y]+=val;?? ????????????y+=lowbit(y);?? ????????}?? ????????x+=lowbit(x);?? ????}?? }?? ?? int?get_sum(int?x,?int?y)?{?? ????int?i=0,j=y;?? ????while?(x>0)?{?? ????????y=j;?? ????????while?(y>0)?{?? ????????????i+=c[x][y];?? ????????????y-=lowbit(y);?? ????????}?? ????????x-=lowbit(x);?? ????}?? ????return?i;?? }?? ?? ?? int?lowbit(int?x)?{?? ????return?x&(-x);?? }?? ?? void?add(int?i,?int?val)?{?? ????while?(i<=n)?{?? ????????c[i]+=val;?? ????????i+=lowbit(i);?? ????}?? }??? ?? int?get_sum(int?i)?{?? ????int?sum=0;?? ????while?(i>0)?{?? ????????sum+=c[i];?? ????????i-=lowbit(i);?? ????}?? ????return?sum;?? } ?
總結
以上是生活随笔為你收集整理的java 树状数组模板源码的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。