Cod sursa(job #1071626)

Utilizator DjokValeriu Motroi Djok Data 3 ianuarie 2014 11:29:18
Problema Cautare binara Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 2.38 kb
var  n,i,j,m,temp,nr,poz,left,right:longint;
     a:array[1..100001] of longint;

begin
assign(input,'cautbin.in');
assign(output,'cautbin.out');
reset(input);
rewrite(output);

   readln(n);
    for i:=1 to n do
     read(a[i]);

  readln(m);
     for i:=1 to m do
      begin
       left:=1; right:=n;  poz:=(left+right) div 2;
       read(temp); readln(nr);
       if temp=0 then begin
                       while (a[poz]<>nr) and (left<right) do
                        begin
                          if a[poz]>nr then right:=poz
                                       else if a[poz]<nr then left:=poz;
                               poz:=(left+right) div 2;
                        end;

                        if a[poz]=nr then begin
                                           for j:=poz to n do
                                            begin
                                             if a[j]=nr then poz:=j
                                                        else break;
                                            end;
                                            writeln(poz);
                                          end
                                     else  writeln('-1');
                      end;

       if temp=1 then begin
                       while (a[poz]>nr) and (left<right) do
                        begin
                         right:=poz;
                         poz:=(left+right) div 2;
                        end;

                         for j:=poz to n do
                          begin
                           if a[j]<=nr then poz:=j
                                       else break;
                          end;
                           writeln(poz);
                      end;


       if temp=2 then  begin
                         while (a[poz]<nr) and (left<right) do
                          begin
                           left:=poz;
                           poz:=(left+right) div 2;
                          end;


                            for j:=poz downto 1 do
                            begin
                              if a[j]>=nr then poz:=j
                                          else break;
                            end;
                            writeln(poz);
                       end;
      end;

close(input);
close(output);
{Si totusi este trist in lume.}
end.