Cod sursa(job #799596)

Utilizator sinio1Stirbat Luca sinio1 Data 19 octombrie 2012 15:43:55
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
FILE* in;
FILE* out;
int v[100000],n;

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

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

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

int main()
{
    int i,x,m,intr;
    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",&m);
    while (m!=0)
    {
        fscanf (in,"%d",&intr);
        if (intr==0)
        {
            fscanf (in,"%d",&x);
            fprintf (out,"%d\n",caut0(x));

        }
        if (intr==1)
        {
            fscanf (in,"%d",&x);
            fprintf (out,"%d\n",caut1(x));
        }
        if (intr==2)
        {
            fscanf (in,"%d",&x);
            fprintf (out,"%d\n",caut2(x));
        }
        m--;
    }
    return 0;
}