Cod sursa(job #1584902)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 30 ianuarie 2016 16:33:14
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
int v[100000];
int n;
int caut0(int x){
    int i,pas;
    pas=1<<16;
    i = 0;
    while (pas!=0){
        if(i+pas<=n && v[i+pas]<=x) i = i + pas;
        pas = pas / 2;
    }

    if(v[i]==x) return i;
    return -1;
}

int caut1(int x){
    int i,pas;
    pas=1<<16;
    i = 0;
    while (pas!=0){
        if(i+pas<=n && v[i+pas]<=x) i = i + pas;
        pas = pas / 2;
    }

    return i;
}

int caut2(int x){
    int i,pas;
    pas=1<<16;
    i = 0;
    while (pas!=0){
        if(i+pas<=n && v[i+pas]<x) i = i + pas;
        pas = pas / 2;
    }

    return i+1;
}

int main()
{
    int m,i,caz,nr;
    FILE *fin, *fout;
    fin = fopen ("cautbin.in", "r");
    fout = fopen("cautbin.out","w");
    fscanf (fin, "%d", &n);
    for(i=0;i<=n-1;i++){
        fscanf(fin,"%d",&v[i]);
    }
    fscanf(fin,"%d",&m);
    for(i=1; i<=m; i++){
        fscanf(fin, "%d%d", &caz, &nr);
        if(caz==0) fprintf (fout, "%d\n", caut0(nr)+1);
        else if(caz==1) fprintf (fout, "%d\n", caut1(nr)+1);
        else if(caz==2) fprintf (fout, "%d\n", caut2(nr)+1);
    }
    fclose (fin);
    fclose (fout);
    return 0;
}