Cod sursa(job #206126)

Utilizator moga_florianFlorian MOGA moga_florian Data 4 septembrie 2008 20:43:11
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 2.04 kb
 #include<stdio.h>  
   
 int N,M,a[100010];  
   
 FILE *fin=fopen("cautbin.in","r"),  
     *fout=fopen("cautbin.out","w");  
   
 void rezolvare_0(int nr){  
   
     int li=1,lf=N;  
     while(lf-li>1){  
         int mij=(li+lf)>>1;  
         if(a[mij]<=nr)  
             li=mij;  
         else  
             lf=mij;  
     }  
   
   
     if(a[lf]==nr)  
         fprintf(fout,"%d\n",lf);  
     else  
         if(a[li]==nr)  
             fprintf(fout,"%d\n",li);  
         else  
             fprintf(fout,"-1\n");  
   
 }  
   
 void rezolvare_2(int nr){  
   
     int li=1,lf=N;  
     while(lf-li>1){  
         int mij=(li+lf)>>1;  
         if(a[mij]<=nr)  
             li=mij;  
         else  
             lf=mij;  
     }  
   
 //    fprintf(fout,"%d %d ",li,lf);  
     if(a[lf] == nr)
        fprintf(fout,"%d\n",lf);
     else
        if(a[li] == nr)
            fprintf(fout,"%d\n",li);
        else
            if(a[li] > nr)
                fprintf(fout,"%d\n",li);
            else
                fprintf(fout,"%d\n",lf);   
 }  
   
 void rezolvare_1(int nr){  
     int li=1,lf=N;  
     while(lf-li>1){  
         int mij=(li+lf)>>1;  
         if(a[mij]<nr)  
             li=mij;  
         else   
             lf=mij;  
     }  
   
 //    fprintf(fout,"%d %d ",li,lf);  
     if(a[li] == nr)
        fprintf(fout,"%d\n",li);
     else
        if(a[lf] == nr)
            fprintf(fout,"%d\n",lf);     
        else
            if(a[lf] < nr)
                fprintf(fout,"%d\n",lf);
            else    
                fprintf(fout,"%d\n",li);
   
 }  
 int main(){  
   
     fscanf(fin,"%d",&N);  
     for(int i=1;i<=N;i++)  
         fscanf(fin,"%d",&a[i]);  
   
     fscanf(fin,"%d",&M);  
     for(int i=1;i<=M;i++){  
         int x,nr;  
         fscanf(fin,"%d%d",&x,&nr);  
         if(x==0) rezolvare_0(nr);  
         else  
             if(x==2) rezolvare_2(nr);  
             else  
                 rezolvare_1(nr);  
     }  
   
 }