Pagini recente » Cod sursa (job #321560) | Cod sursa (job #195660)
Cod sursa(job #195660)
program caut;
var f,g:text;
v:array[1..100000]of longint;
n,m,i,elem,rasp:longint;
int:byte;
procedure zero(elem:longint;var rasp:longint);
var st,dr:longint;
ok:boolean;
begin
ok:=false;
st:=1;dr:=n;
while not ok do begin
if elem>=v[(st+dr)div 2] then st:=(st+dr) div 2
else dr:=(st+dr) div 2;
if elem=v[st] then begin while v[st]=elem do st:=st+1;
ok:=true;
rasp:=st-1;
end;
if elem=v[dr] then begin while v[dr]=elem do dr:=dr+1;
ok:=true;
rasp:=dr-1;
end;
if (st=dr)and(not ok) then begin
rasp:=-1;
ok:=true;
end;
end;
end;
procedure doi(elem:longint;var rasp:longint);
var st,dr:longint;
ok:boolean;
begin
ok:=false;
st:=1;dr:=n;
while not ok do begin
if elem>=v[(st+dr)div 2] then st:=(st+dr) div 2
else dr:=(st+dr) div 2;
if elem=v[st] then begin while v[st]=elem do st:=st+1;
ok:=true;
rasp:=st;
end;
if elem=v[dr] then begin while v[dr]=elem do dr:=dr+1;
ok:=true;
rasp:=dr;
end;
if st=dr then begin
rasp:=st+1;
ok:=true;
end;
end;
end;
procedure unu(elem:longint;var rasp:longint);
var st,dr:longint;
ok:boolean;
begin
ok:=false;
st:=1;dr:=n;
while not ok do begin
if elem>=v[(st+dr)div 2] then st:=(st+dr) div 2
else dr:=(st+dr) div 2;
if elem=v[st] then begin while v[st]=elem do st:=st-1;
ok:=true;
rasp:=st;
end;
if elem=v[dr] then begin while v[dr]=elem do dr:=dr-1;
ok:=true;
rasp:=dr;
end;
if st=dr then begin
rasp:=st;
ok:=true;
end;
end;
end;
begin
assign(f,'cautbin.in');
assign(g,'cautbin.out');
reset(f);rewrite(g);
readln(f,n);
for i:=1 to n do read(f,v[i]);
readln(f);
readln(f,m);
for i:=1 to m do begin
readln(f,int,elem);
if int=0 then zero(elem,rasp)
else if int=1 then unu(elem,rasp)
else doi(elem,rasp);
writeln(g,rasp);
end;
end.