Cod sursa(job #402013)

Utilizator nickyyLal Daniel Emanuel nickyy Data 23 februarie 2010 12:25:30
Problema Cautare binara Scor 60
Compilator fpc Status done
Runda Arhiva educationala Marime 0.99 kb
const infile='cautbin.in';
  outfile='cautbin.out';
  maxnm=100000;
var v:array[1..maxnm]of longint;
  n,m,x,r,i:longint;
  op:0..2;
  fi,fo:text;

 function eg_mare(x:longint):longint;
 var s,d,m:longint;
 begin
  s:=1; d:=n ;
  while(s<=d)do begin
    m:=(s+d)shr 1;
    if(x<v[m])then d:=m-1
    else s:=m+1;
    end;
  eg_mare:=d;
 end;

 function mic(x:longint):longint;
 var s,d,m:longint;
 begin
   s:=1; d:=n;
   while(s<=d)do begin
     m:=(s+d) shr
     1;
     if(v[m]<x)then s:=m+1
     else d:=m-1;
     end;
   mic:=s;
 end;

begin
 assign(fi,infile); reset(fi);
 assign(fo,outfile); rewrite(fo);
 readln(fi,n); for i:=1 to n do read(fi,v[i]);
 readln(fi,m);
 while(m>0)do begin
   readln(fi,op,x);
   case op of
     0:begin
         r:=eg_mare(x);
         if(v[r]<>x)then writeln(fo,-1)
         else writeln(fo,r);
         end;
     1:writeln(fo,eg_mare(x));
     2:writeln(fo,mic(x));
     end;
   dec(m);
   end;
 close(fi); close(fo);
end.