poj1195 二维树状数组【pascal】

二维树状数组模板=。=

var
        tt,n,x,y,l,b,r,t,z:longint;
        i,j               :longint;
        c                 :array[0..1025,0..1025] of longint;
function lowbit(x:longint):Longint;
begin
   exit(x and (-x));
end;

procedure add(x,y,z:longint);
var
        t1,t2:longint;
begin
   while (x<=n) do
   begin
      t1:=y;
      while (t1<=n) do
       begin
          inc(c[x,t1],z);
          inc(t1,lowbit(t1));
       end;
       inc(x,lowbit(x));
   end;

end;

function sum(x,y:longint):longint;
var
        ans,y1:longint;
begin
   ans:=0;
   while (x>0) do
   begin
      y1:=y;
      while (y1>0) do
      begin
         inc(ans,c[x,y1]);
         dec(y1,lowbit(y1));
      end;
      dec(x,lowbit(x));
   end;
   exit(ans);
end;

function find(l,b,r,t:longint):Longint;
begin
   exit(sum(r,t)-sum(l-1,t)-sum(r,b-1)+sum(l-1,b-1));
end;

begin
   read(tt);
   while (tt<>3) do
   begin
      if (tt=0) then
      begin
         read(n);
         fillchar(c,sizeof(c),0);
      end else
      if (tt=1) then
      begin
          read(x,y,z);
          inc(x);inc(y);
          add(x,y,z);
      end else
      if (tt=2) then
      begin
           read(l,b,r,t);
           inc(l);inc(b);inc(r);inc(t);
           writeln(find(l,b,r,t));
      end;
      read(tt);
   end;
end.
——by Eirlys

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值