Cod sursa(job #1798670)

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

long long int v[100000],n;

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

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

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