Cod sursa(job #226840)

Utilizator johnyJohny Deep johny Data 2 decembrie 2008 21:50:10
Problema Cautare binara Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.85 kb
program cautabin;
var A:array[1..100000] of longint;
n,m: longint;
k,x: longint;
i: longint;

function cbin(s,d,k,x:longint):longint;
var m: longint;
begin
  if s>=d then
  begin
    case k of
    0: cbin:=-1;
    1: cbin:=d;
    2: cbin:=s;
    end;
  end
  else
  begin
    m:=(s+d) div 2;
    if A[m]>x then cbin:=cbin(s,m-1,k,x)
    else
    if A[m]<x then cbin:=cbin(m+1,d,k,x)
    else
    begin
      cbin:=m;
      if k=0 then
      begin
        while A[m]=x do inc(m);
        cbin:=m-1;
      end;
    end;
  end;
end;

begin
  assign(input,'cautbin.in');
  reset(input);
  assign(output,'cautbin.out');
  rewrite(output);
  readln(n);
  for i:=1 to n do
   read(A[i]);
  readln;
  readln(m);
  for i:=1 to m do
  begin
    readln(k,x);
    writeln(cbin(1,n,k,x));
  end;
  close(input);
  close(output);
end.