Pagini recente » Cod sursa (job #867503) | Cod sursa (job #3137913) | Cod sursa (job #2943544) | Cod sursa (job #2943553) | Cod sursa (job #736963)
Cod sursa(job #736963)
Program aib;
var w,aux:array [0..100001] of longint;
i,n,m,t,a,b,pos:longint;
b1,b2:array [1..1 shl 17] of char;
fi,fo:text;
function k(x:longint):byte;
var nr:byte;
begin
nr:=0; while x and 1=0 do begin inc(nr); x:=x shr 1; end;
k:=nr;
end;
function sum(x:longint):longint;
var s:longint;
begin
s:=0;
while x>0 do begin s:=s+aux[x]; x:=x-(1 shl k(x)); end;
sum:=s;
end;
procedure cauta(x:longint);
var l,r,mid,p:longint;
begin
l:=1; r:=n; pos:=-1;
while (l<=r) and (pos=-1) do begin
mid:=(l+r) div 2; p:=sum(mid);
if p>x then r:=mid-1
else if p<x then l:=mid+1
else pos:=mid;
end;
end;
begin
assign(fi,'aib.in');
assign(fo,'aib.out');
settextbuf(fi,b1); settextbuf(fo,b2);
reset(fi); rewrite(fo); readln(fi,n,m);
for i:=1 to n do begin
read(fi,w[i]); w[i]:=w[i]+w[i-1];
end; readln(fi);
for i:=1 to n do aux[i]:=w[i]-w[i-(1 shl k(i))];
for i:=1 to m do begin
read(fi,t);
if t=0 then begin readln(fi,a,b); while a<=n do begin aux[a]:=aux[a]+b; a:=a+(1 shl k(a)); end; end
else if t=1 then begin readln(fi,a,b); writeln(fo,sum(b)-sum(a-1)); end
else begin readln(fi,a); cauta(a); writeln(fo,pos); end;
end;
close(fo);
end.