Cod sursa(job #1527508)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 18 noiembrie 2015 11:05:00
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define lim 100000
#define LOG 16
int v[lim+1],n;
int cautx(int x){
    int pas,i,pp=-1;
    pas=1<<LOG;
    i=0;
    while(pas!=0&&pp==-1){
        if(i+pas<=n&&v[i+pas]<=x)
            i+=pas;
        if(v[i]==x)
            pp=i;
        pas/=2;
    }
    return pp;
}
int cautmicx(int x){
    int pas,i;
    pas=1<<LOG;
    i=0;
    while(pas!=0){
        if(i+pas<=n&&v[i+pas]<=x)
            i+=pas;
        pas/=2;
    }
    return i;
}
int cautmarex(int x){
    int pas,i;
    pas=1<<LOG;
    i=0;
    while(pas!=0){
        if(i+pas<=n&&v[i+pas]<x)
            i+=pas;
        pas/=2;
    }
    return i;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("cautbin.in","r");
    fout=fopen("cautbin.out","w");
    int i,x,cer,j,m;
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(fin,"%d",&v[i]);
    fscanf(fin,"%d",&m);
    for(j=1;j<=m;j++){
        fscanf(fin,"%d%d",&cer,&x);
        if(cer==0)
            fprintf(fout,"%d\n",cautx(x));
        if(cer==1)
            fprintf(fout,"%d\n",cautmicx(x));
        if(cer==2)
            fprintf(fout,"%d\n",cautmarex(x)+1);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}