Cod sursa(job #198395)

Utilizator alex23alexandru andronache alex23 Data 11 iulie 2008 09:02:41
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <stdio.h>

int a[100005],n,m,i,x,val;


/*int CautareBinara(int li,int ls,int val)
  {int mid=li+(ls-li)/2;
   if (a[mid]==val) {while (a[mid+1]==val)
                             mid++;
                     return mid;
                     }
             else
             if (a[mid]>val) CautareBinara(li,mid-1,val);
                        else CautareBinara(mid+1,ls,val);
   return -1;
   }*/

int CautareBinara1(int li,int ls,int val)
  {int mid;
   while (li<=ls)
      {mid=li+(ls-li)/2;
       if (a[mid]==val) {while (a[mid+1]==val)
                             mid++;
                         return mid;
                         }
                   else
             if (a[mid]>val) ls=mid-1;
                        else li=mid+1;
       }
   return -1;
   }

int CautareBinara2(int li,int ls,int val)
  {int mid;
   while (li<=ls)
     {mid=li+(ls-li)/2;
       if (a[mid]==val) return mid;
                   else
             if (a[mid]>val) ls=mid-1;
                        else li=mid+1;
       }
   return ls;
   }

int CautareBinara3(int li,int ls,int val)
  {int mid;
   while (li<=ls)
     {mid=li+(ls-li)/2;
       if (a[mid]==val) {while (a[mid+1]==val)
                             mid++;
                         return mid;
                         }
                   else
             if (a[mid]>val) ls=mid-1;
                        else li=mid+1;
       }
   return li;
   }

int main()
 {FILE *f,*g;

  f=fopen("cautbin.in","r");
  g=fopen("cautbin.out","w");

  fscanf(f,"%d",&n);
  for (i=1;i<=n;i++)
      fscanf(f,"%d",&a[i]);
  fscanf(f,"%d",&m);
  for (i=1;i<=m;i++)
      {fscanf(f,"%d %d",&x,&val);
       if (x==0) fprintf(g,"%d\n",CautareBinara1(1,n,val));
       if (x==1) fprintf(g,"%d\n",CautareBinara2(1,n,val));
       if (x==2) fprintf(g,"%d\n",CautareBinara3(1,n,val));
       }
  fclose(f);
  fclose(g);

  return 0;
  }