Cod sursa(job #555400)

Utilizator alexamiu2008Miu Alexandra alexamiu2008 Data 15 martie 2011 14:30:22
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
FILE*fin,*fout;
int i,j,n,v[100001],t,x,nr;
int caut0(int x){
int p,u,m,k;
   p=1;u=n;
   while(p<=u){
   m=(p+u)/2;
   if(v[m]>x){u=m-1;}
   if(v[m]==x){p=m+1;k=m;}

   }

return k;
}


int caut1(int x){
int u,p,m,k;
    p=1;u=n;
   while(p<=u){
   m=(p+u)/2;
   if(v[m]>x){u=m-1;}
   else{p=m+1;k=m;}

   }

return k;




}



int caut2(int x){
int p,u,m,k;
    p=1;u=n;
   while(p<=u){
   m=(p+u)/2;
   if(v[m]>=x){u=m-1;k=m;}
   else{p=m+1;}

   }

return k;




}

int main(){
fin=fopen("cautbin.in","r");
fout=fopen("cautbin.out","w");
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&v[i]);

}
int ok;
fscanf(fin,"%d",&nr);
for(i=1;i<=nr;i++){
fscanf(fin,"%d %d",&t,&x);
if(t==0){
       ok=caut0(x);
if(ok!=0){fprintf(fout,"%d\n",ok);
}
else{fprintf(fout,"-1\n");}
}
if(t==1){
ok=caut1(x);
fprintf(fout,"%d\n",ok);
}

if(t==2){
ok=caut2(x);
fprintf(fout,"%d\n",ok);

}

}

return 0;}