Cod sursa(job #514564)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 19 decembrie 2010 09:47:39
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
FILE *f,*g;
long long n,m,v[1001];

int search0(int a)
{int u,p,mij,poz=-1;
 p=1; u=n;
 while(p<=u)
 {mij=(p+u)/2;
  if(v[mij]==a)
  {poz=mij;
   p=mij+1;
  }
  else if(v[mij]>a)
    u=mij-1;
  else if(v[mij]<a)
	 p=mij+1; 
 }
return poz;
} 
int search1(int a) 
{int u,p,mij,poz=-1;
 p=1; u=n;
 while(p<=u)
 {mij=(p+u)/2;
  if(v[mij]<=a)
  {poz=mij;
   p=mij+1;
  }
  else if(v[mij]>a)
	 u=mij-1;
 }
return poz; 
}
int search2(int a)
{int p,u,mij,poz;
 p=1; u=n;
 while(p<=u)
 {mij=(p+u)/2;
  if(v[mij]>=a)
  {poz=mij;
   u=mij-1;
  }
  else if(v[mij]<a)
	 p=mij+1; 
 }
return poz;
}

int main()
{int i,j;
  f=fopen("cautbin.in","r");
  g=fopen("cautbin.out","w");
  
  fscanf(f,"%lld",&n);
  for(i=1;i<=n;i++)
     fscanf(f,"%lld",&v[i]);
  
  fscanf(f,"%lld",&m);
  long long q;
  short t; 
  long long r;
  for(i=1;i<=m;i++)
  {fscanf(f,"%d %lld",&t,&q);
   if (t==0) r=search0(q); 
   else if(t==1) r=search1(q);
   else r=search2(q); 
   fprintf(g,"%lld\n",r);
  }
  fclose(f);
  fclose(g);
return 0;
}