Cod sursa(job #205273)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 30 august 2008 16:01:48
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<stdio.h>

int N,M,a[100010];

FILE *fin=fopen("cautbin.in","r"),
    *fout=fopen("cautbin.out","w");

void rezolvare(int nr,int c){

    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(c==0){
        if(a[lf]==nr) fprintf(fout,"%d\n",lf);
        else
            if(a[li]==nr) fprintf(fout,"%d\n",li);
            else
                fprintf(fout,"-1\n");
    }
    else
        if(c==1){
            if(a[lf]==nr||a[lf]<nr)
                fprintf(fout,"%d\n",lf+1);
            else
            if(a[li]==nr){
                for(;a[li]==nr&&li;li--);
                fprintf(fout,"%d\n",li+1);
            }
            else
                fprintf(fout,"%d\n",li);

        }
        else{
            if(a[li]==nr||a[li]>nr)
                fprintf(fout,"%d\n",li);
             else
                fprintf(fout,"%d\n",lf);
        }

}

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 c,nr;
            fscanf(fin,"%d %d",&c,&nr);
            rezolvare(nr,c);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}