生活随笔
收集整理的這篇文章主要介紹了
java 树状数组模板源码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
樹狀數(shù)組是一個查詢和修改復(fù)雜度都為log(n)的數(shù)據(jù)結(jié)構(gòu),將樹狀數(shù)組看成一種數(shù)據(jù)結(jié)構(gòu),對于一個數(shù)組,如果有多次操作,每次的操作有兩種:1、修改數(shù)組中某一元素的值,2、求和,求數(shù)組元素a[1]+a[2]+…a[num]的和,這是樹狀數(shù)組最基本的應(yīng)用了。
?? 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;?? } ?
總結(jié)
以上是生活随笔為你收集整理的java 树状数组模板源码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。