Cod sursa(job #1798663)

Utilizator rares1012Rares Cautis rares1012 Data 5 noiembrie 2016 12:41:51
Problema Cautare binara Scor 50
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#include <stdlib.h>

int v[100000],n;

inline int f1(int x,int pas){
    int r=0;
    while(pas>0)
        {
            if(r+pas<n && v[r+pas]<=x)
                r+=pas;
            pas/=2;
        }
    if(v[r]<x)
        return -1;
    return r+1;
}

inline int f2(int x,int pas){
    int r=0;
    while(pas>0)
        {
            if(r+pas<n && v[r+pas]<=x)
                r+=pas;
            pas/=2;
        }
    return r+1;
}

inline int f3(int x,int pas){
    int r=0;
    while(pas>0)
        {
            if(r+pas<n && v[r+pas]<x)
                r+=pas;
            pas/=2;
        }
    return r+2;
}

int main()
{
    int i,k,c,x,r,p;
    FILE*fi,*fo;
    fi=fopen("cautbin.in","r");
    fo=fopen("cautbin.out","w");
    fscanf(fi,"%d",&n);
    for(i=0;i<n;i++)
        {
            fscanf(fi,"%d",&v[i]);
        }
    fscanf(fi,"%d",&k);
    p=1<<17;
    for(i=0;i<k;i++)
        {
            fscanf(fi,"%d%d",&c,&x);
            if(c==0)
                r=f1(x,p);
            else if(c==1) r=f2(x,p);
            else r=f3(x,p);
            fprintf(fo,"%d\n",r);
        }
    fclose(fi);
    fclose(fo);
    return 0;
}