Cod sursa(job #1768248)

Utilizator andra1782Andra Alazaroaie andra1782 Data 30 septembrie 2016 16:22:51
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#define L 16
int v[100001],n,x;

int r0(){
    int i,pas;

    i=0;
    pas=1<<L;
    while(pas!=0){
        if(i+pas<=n && v[i+pas]<=x)
            i+=pas;
        pas/=2;
    }
    if(v[i]==x)
        return i;
    return -1;
}

int r1(){
    int i,pas;

    i=0;
    pas=1<<L;
    while(pas!=0){
        if(i+pas<=n && v[i+pas]<=x)
            i+=pas;
        pas/=2;
    }
    return i;
}

int r2(){
    int i,pas;

    i=0;
    pas=1<<L;
    while(pas!=0){
        if(i+pas<=n && v[i+pas]<x)
            i+=pas;
        pas/=2;
    }
    return i+1;
}

int main(){
    FILE *fin=fopen("cautbin.in","r");
    FILE *fout=fopen("cautbin.out","w");
    int i,m,tip;

    fscanf(fin,"%d",&n);
    for(i=1; i<=n; i++)
        fscanf(fin,"%d",&v[i]);
    fscanf(fin,"%d",&m);
    for(i=1; i<=m; i++){
        fscanf(fin,"%d%d",&tip,&x);
        if(tip==0)
            fprintf(fout,"%d\n",r0());
        else if(tip==1)
            fprintf(fout,"%d\n",r1());
        else
            fprintf(fout,"%d\n",r2());
    }
    fclose(fin);
    fclose(fout);
    return 0;
}