【数据结构】Binary_Indexed_Tree

点修改 段求和

1
var 2 a:array[1..100000] of integer; 3 t:array[1..100000] of longint; 4 i,j,n:integer; 5 function lowbit(x:integer):integer; 6 begin 7 exit(x and (-x)); 8 end; 9 procedure edit(k:integer;x:longint); 10 var 11 i,temp:integer; 12 begin 13 i:=k; 14 temp:=a[k]-x; 15 while i<=n do 16 begin 17 inc(t[i],temp); 18 i:=i+lowbit(i); 19 end; 20 end; 21 function sum(k:integer):longint; 22 var 23 i:integer; 24 begin 25 i:=k; 26 while i>0 do 27 begin 28 inc(sum,t[i]); 29 i:=lowbit(i); 30 end; 31 end; 32 begin 33 for i:=1 to n do 34 begin 35 for j:=i-lowbit(i)+1 to i do inc(t[i],a[j]); 36 end; 37 end.

 

posted @ 2013-08-14 13:43  OmegaIota  阅读(155)  评论(0编辑  收藏  举报