Cod sursa(job #1768238)

Utilizator andra1782Andra Alazaroaie andra1782 Data 30 septembrie 2016 16:13:16
Problema Cautare binara Scor 50
Compilator c Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#define L 16
int v[100000],n;

int r0(int x){
    int i,pas;

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

int r1(int x){
    int i,pas;

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

int r2(int x){
    int i,pas;

    i=0;
    pas=1<<L;
    while(pas!=0){
        if(v[i+pas]<x && i+pas<=n)
            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,x;

    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(x));
        else if(tip==1)
            fprintf(fout,"%d\n",r1(x));
        else
            fprintf(fout,"%d\n",r2(x));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}