Cod sursa(job #202406)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 8 august 2008 03:14:10
Problema Cautare binara Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
long sir[100001];
int main ()
{long st,dr,n,m,i,a,b,mij;
 FILE *fin=fopen("cautbin.in","r");
 FILE *fout=fopen("cautbin.out","w");
 fscanf(fin,"%ld",&n);
 for (i=1;i<=n;i++)
 {fscanf(fin,"%ld",&sir[i]);}
 fscanf(fin,"%ld",&m);
 for (i=1;i<=m;i++)
 {fscanf(fin,"%ld%ld",&a,&b);
  switch(a)
  {case 0:
   for(st=1,dr=n;!(sir[mij=(st+dr)/2]==b&&sir[mij-1]!=b)&&st<=dr;)
   {(b<sir[mij])?(dr=mij-1):(st=mij+1);}
   if(st>dr)
   fprintf(fout,"-1\n");
   else
   fprintf(fout,"%ld\n",mij);
   break;
   case 1:
   for(st=1,dr=n;!(sir[mij=(st+dr)/2]<=b&&sir[mij+1]>b)&&st<=dr;)
   {(b<sir[mij])?(dr=mij-1):(st=mij+1);}
   fprintf(fout,"%ld\n",mij);

   break;
   case 2:
   for(st=1,dr=n;!(sir[mij=(st+dr)/2]>=b&&sir[mij-1]<b)&&st<=dr;)
   {(b<sir[mij])?(dr=mij-1):(st=mij+1);}
   fprintf(fout,"%ld\n",mij);
  }
 }
 fclose(fout);
 return 0;
}