Cod sursa(job #50783)
Utilizator | Data | 8 aprilie 2007 20:27:09 | |
---|---|---|---|
Problema | Datorii | Scor | 100 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 2.4 kb |
program tribute_to_mars;
type vect=array[1..15000] of longint;
var f,g:text;
c:vect;
n,m,ad,i,poz,st,bit,q,prod,x,a,b,sum1,sum2:longint;
begin
assign(f,'datorii.in'); reset(f);
assign(g,'datorii.out'); rewrite(g);
read(f,n,m);
for i:=1 to n do begin
read(f,ad);
poz:=i;
{ st:=0;
prod:=1;}
while poz<=n do begin
c[poz]:=c[poz]+ad;
bit:=(poz and (poz-1)) xor poz;
{ dec(bit);
for q:=st+1 to bit do prod:=prod*2;
st:=bit; }
poz:=poz+bit;
end;
end;
for i:=1 to m do begin
read(f,x,a,b);
if x=1 then begin
sum1:=0;
poz:=b;
{st:=0;
prod:=1;}
while poz>0 do begin
sum1:=sum1+c[poz];
bit:=(poz and (poz-1)) xor poz;
{dec(bit);
for q:=st+1 to bit do prod:=prod*2;
st:=bit; }
poz:=poz-bit;
end;
sum2:=0;
poz:=a-1;
{ st:=0;
prod:=1; }
while poz>0 do begin
sum2:=sum2+c[poz];
bit:=(poz and (poz-1)) xor poz;
{ dec(bit);
for q:=st+1 to bit do prod:=prod*2;
st:=bit; }
poz:=poz-bit;
end;
writeln(g,sum1-sum2);
end
else begin
ad:=-b;
poz:=a;
{ st:=0;
prod:=1; }
while poz<=n do begin
c[poz]:=c[poz]+ad;
bit:=(poz and (poz-1)) xor poz;
{ dec(bit);
for q:=st+1 to bit do prod:=prod*2;
st:=bit; }
poz:=poz+bit;
end;
end;
end;
close(f); close(g);
end.