二维树状数组

来源:互联网 发布:excel2003找相同数据 编辑:程序博客网 时间:2024/06/02 07:03
//二维树状数组//即行lowbit,列lowbitvar c:array[0..1030,0..1030]of longint;    n,m,x,y,k,x1,y1,x2,y2:longint;function lowbit(x:longint):longint;begin lowbit:=x and(-x);end;procedure modify(x,y,delta:longint);var i,j:longint;begin  i:=x; while i<=n do   begin   j:=y;   while j<=n do    begin      c[i,j]:=c[i,j]+delta;     j:=j+lowbit(j);    end;   i:=i+lowbit(i);  end; end;function sum(x,y:longint):longint;var ans,i,j:longint;begin  ans:=0; i:=x; while i>0 do  begin   j:=y;   while j>0 do    begin     ans:=ans+c[i,j];     j:=j-lowbit(j);    end;   i:=i-lowbit(i);  end; sum:=ans;end;begin read(n); read(m); while m<>3 do  begin   if m=1 then     begin     read(x,y,k);     x:=x+1;y:=y+1;     modify(x,y,k);    end;   if m=2 then     begin     read(x1,y1,x2,y2);     inc(x1);inc(x2);inc(y1);inc(y2);     writeln(sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1));    end;   read(m);  end;end.
0 0
原创粉丝点击