Cod sursa(job #555428)

Utilizator alexamiu2008Miu Alexandra alexamiu2008 Data 15 martie 2011 14:49:19
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 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;}
   else if(v[m]==x){k=m;p=m+1;}

   }

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++){
ok=0;
fscanf(fin,"%d %d",&t,&x);
if(t==0){
       ok=caut0(x);
if(ok<=n&&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);

}

}
fclose(fin);
fclose(fout);

return 0;}