Pagini recente » Cod sursa (job #1685835) | Cod sursa (job #367635)
Cod sursa(job #367635)
var op,y,i,n,x,ind,m,s1,s2,mij:longint;
a:array[0..100004] of longint;
begin
assign(input,'aib.in');
reset(input);
assign(output,'aib.out');
rewrite(output);
readln(n,m);
for i:=1 to n do begin
read(x);
ind:=i;
while ind<=n do begin
a[ind]:=a[ind]+x;
ind:=ind+(-ind and ind);
end;
end;
for i:=1 to m do begin
read(op);
if op=0 then begin
readln(ind,x);
while ind<=n do begin
a[ind]:=a[ind]+x;
ind:=ind+(-ind and ind);
end;
end;
if op=1 then begin
s1:=0;
s2:=0;
readln(x,y);
dec(x);
while x>0 do begin
s1:=s1+a[x];
x:=x-(-x and x);
end;
while y>0 do begin
s2:=s2+a[y];
y:=y-(-y and y);
end;
writeln(s2-s1);
end;
if op=2 then begin
s2:=0;
readln(s1);
mij:=0;
x:=1;
y:=n;
while (x<=y) and (s1<>s2) do begin
s2:=0;
mij:=(x+y) div 2;
ind:=mij;
while ind>0 do begin
s2:=s2+a[ind];
ind:=ind-(-ind and ind);
end;
if s1>s2 then begin
x:=mij+1;
end else if s1<s2 then
y:=mij-1;
end;
if s1=s2 then writeln(mij) else writeln(-1);
end;
end;
close(input);
close(output);
end.