Cod sursa(job #799597)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 19 octombrie 2012 15:44:04
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>
int v[100000];
int caz0(int x,int m){
    int i=0,pas=1<<16;
    while(pas!=0){
        if(i+pas<m && v[pas+i]<=x)
            i+=pas;
        pas/=2;
    }
    if(v[i]==x) return i;
    return -2;
}
int caz1(int x,int m){
    int i=0,pas=1<<16;
    while(pas!=0){
        if(i+pas<m && v[i+pas]<=x)
            i+=pas;
        pas/=2;
    }
    return i;
}
int caz2(int x,int m){
    int i=-1,pas=1<<16;
    while(pas!=0){
        if(i+pas < m && v[i+pas]<x)
            i+=pas;
        pas/=2;
    }
    return i+1;
}
int main(){
    int n,m,tip,i,j,x;
    FILE *fin,*fout;
    fin=fopen("cautbin.in","r");
    fout=fopen("cautbin.out","w");
    fscanf(fin,"%d",&m);
    for(i=0;i<m;i++)
        fscanf(fin,"%d",&v[i]);
    fscanf(fin,"%d",&n);
    for(j=0;j<n;j++){
        fscanf(fin,"%d%d",&tip,&x);
        switch(tip){
            case 0 :
                i=caz0(x,m);
                break;
            case 1 :
                i=caz1(x,m);
                break;
            case 2 :
                i=caz2(x,m);
                break;
        }
        fprintf(fout,"%d\n",i+1);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}