Cod sursa(job #799593)

Utilizator hrazvanHarsan Razvan hrazvan Data 19 octombrie 2012 15:37:56
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.37 kb
#include <stdio.h>

int v[100000],n;
int caut0(int m)
{
    int i=-1,pas=1<<16;
    while(pas!=0)
    {
        if(pas+i<n)
        {
            if(v[pas+i]<=m)
            {
                i=pas+i;
            }
        }
        pas/=2;
    }
    if(v[i]!=m) return -1;
    return i+1;
}
int caut1(int m)
{
    int i=-1,pas=1<<16;
    while(pas>0)
    {
        if(pas+i<n)
        {
            if(v[pas+i]<=m)
            {
                i=pas+i;
            }
        }
        pas/=2;
    }
    return i+1;
}
int caut2(int m)
{
    int i=-1,pas=1<<16;
    while(pas>0)
    {
        if(pas+i<n)
        {
            if(v[pas+i]<m)
            {
                i=pas+i;
            }
        }
        pas/=2;
    }
    return i+2;
}

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