Cod sursa(job #6357)
Utilizator | Data | 18 ianuarie 2007 23:49:00 | |
---|---|---|---|
Problema | Datorii | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 3.31 kb |
program datorii;
var f,g:text;
v:array[0..15001] of longint;
c:array[0..15001] of longint;
n,m:longint;
procedure iofile;
var i:longint;
begin
assign(f,'datorii.in');
reset(f);
assign(g,'datorii.out');
rewrite(g);
readln(f,n,m);
for i:=1 to n do
begin
read(f,v[i]);
v[i]:=v[i]+v[i-1];
end;
fillchar(c,sizeof(c),0);
end;
function doila(x:longint):longint;
var p,i:longint;
begin
p:=1;
for i:=1 to x do
p:=p*2;
doila:=p;
end;
procedure aib;
var i,poz,s1,s2,ind,val,cod,st,dr,sum:longint;
begin
for i:=1 to m do
begin
read(f,cod);
if cod=0 then
begin
read(f,ind);
readln(f,val);
poz:=0;
while ind<=n do
begin
c[ind]:=c[ind]+val;
while ind and doila(poz)=0 do
poz:=poz+1;
ind:=ind+doila(poz);
poz:=poz+1;
end;
end else
begin
read(f,st);
readln(f,dr);
poz:=0;
s1:=0;
sum:=v[dr]-v[st-1];
while dr>0 do
begin
s1:=s1+c[dr];
while dr and doila(poz)=0 do
poz:=poz+1;
dr:=dr-doila(poz);
poz:=poz+1;
end;
s2:=0;
poz:=0;
st:=st-1;
while st>0 do
begin
s2:=s2+c[st];
while st and doila(poz)=0 do
poz:=poz+1;
st:=st-doila(poz);
poz:=poz+1;
end;
writeln(g,sum-s1+s2);
end;
end;
close(g);
end;
begin
iofile;
aib;
end.