二维树状数组

//二维树状数组
//即行lowbit,列lowbit
var 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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值