Cod sursa(job #411117)

Utilizator hungntnktpHungntnktp hungntnktp Data 4 martie 2010 18:49:52
Problema Cautare binara Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.35 kb
{DINH QUANG DAT TIN 07-10}
{CAUTBIN}
CONST
 TFI='cautbin.in';
 TFO='cautbin.out';
 MAX=100001;
TYPE
 arr1int=array[0..MAX] of longint;
VAR
 fi,fo:text;
 res,task,x,m,n:longint;
 a:arr1int;

PROCEDURE       process1;
var
 l,r,mid:longint;
begin
 l:=1;
 r:=n;
 res:=-1;
 while l<=r do
  begin
   mid:=(l+r) div 2;
   if a[mid]=x then
    begin
     res:=mid;
     l:=mid+1;
    end else r:=mid-1;
  end;
 writeln(fo,res);
end;

PROCEDURE       process2;
var
 l,r,mid:longint;
begin
 l:=1;
 r:=n;
 while l<=r do
  begin
   mid:=(l+r) div 2;
   if a[mid]<=x then
    begin
     res:=mid;
     l:=mid+1;
    end else r:=mid-1;
  end;
 writeln(fo,res);
end;

PROCEDURE       process3;
var
 l,r,mid:longint;
begin
 l:=1;
 r:=n;
 while l<=r do
  begin
   mid:=(l+r) div 2;
   if a[mid]>=x then
    begin
     res:=mid;
     r:=mid-1;
    end else l:=mid+1;
  end;
 writeln(fo,res);
end;

PROCEDURE       input;
var
 i:longint;
begin
 read(fi,n);
 for i:= 1 to n do read(fi,a[i]);
end;

PROCEDURE       process;
var
 i:longint;
begin
 read(fi,m);
 for i:= 1 to m do
  begin
   read(fi,task,x);
   case task of
    0:process1;
    1:process2;
    2:process3;
   end;

  end;
end;

BEGIN
 assign(fi,tfi);reset(fi);
 assign(fo,tfo);rewrite(fo);
  input;
  process;
 close(fo);
 close(fi);
END.