Cod sursa(job #1113700)

Utilizator sulzandreiandrei sulzandrei Data 20 februarie 2014 20:32:28
Problema Cautare binara Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.61 kb
program cautarediv_iminsircrescator;
var v:array[1..100000] of longint;
i,m,n,a:longint; t:byte; f,g:text;
function div_imp_bin(p,q:longint):longint;
var mij:longint;
begin
 if q<p then div_imp_bin:=-1
         else begin
            mij:=(p+q) div 2;
            if (a=v[mij]) and (v[mij+1]>a) then div_imp_bin:=mij
                        else if a<v[mij] then div_imp_bin:=div_imp_bin(p,mij-1)
                         else div_imp_bin:=div_imp_bin(mij+1,q);
end;
end;
function div_imp_bin2(p,q:longint):longint;
var mij:longint;
begin
 if q<p then div_imp_bin2:=0
        else begin
         mij:=(p+q) div 2;
         if (a<=v[mij]) and (a<v[mij+1]) then div_imp_bin2:=mij
                    else if a<v[mij] then div_imp_bin2:=div_imp_bin2(p,mij-1)
                                     else div_imp_bin2:=div_imp_bin2(mij+1,q);
     end;
end;
function div_imp_bin3(p,q:longint):longint;
var mij:longint;
begin
 if q<p then div_imp_bin3:=0
        else begin
        mij:=(p+q) div 2;
        if (v[mij]>=a) and (v[mij-1]<a) then div_imp_bin3:=mij
                else if (a<=v[mij]) then div_imp_bin3:=div_imp_bin3(p,mij-1)
                     else div_imp_bin3:=div_imp_bin3(mij+1,q);
            end;
end;
begin
 assign(f,'cautbin.in'); reset(f);
 readln(f,n);
 for i:=1 to n do
  read(f,v[i]);
  readln(f);
  readln(f,m);
 assign(g,'cautbin.out'); rewrite(g);
 for i:=1 to m do begin
  read(f,t);
  readln(f,a);
  writeln(t,' ',a);
  case t of
  0:writeln(g,div_imp_bin(1,n));
  1:writeln(g,div_imp_bin2(1,n));
  2:writeln(g,div_imp_bin3(1,n));
  end;
end;
 close(f);
 close(g);
end.