Cod sursa(job #1424804)

Utilizator Andrei501Clicinschi Andrei Andrei501 Data 25 aprilie 2015 15:36:56
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.49 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long v[100001];

int main()
{
    FILE *fin,*fout;
    fin=fopen ("cautbin.in","r");
    fout=fopen ("cautbin.out","w");

    long N,M;
    fscanf (fin,"%d",&N);
    long i,j;
    for (i=1; i<=N; i++)
    {
        fscanf (fin,"%d",&v[i]);
    }
    fscanf (fin,"%d",&M);
    int tip,L;
    L=floor (log2 (N));
    long x,pas;

    for (i=1; i<=M; i++)
    {
        fscanf (fin,"%d",&tip);
        fscanf (fin,"%d",&x);

        j=0;
        pas=1<<L;

        if (tip==0)
        {
            while (pas!=0)
            {
                if ((j+pas)<=N && v[j+pas]<=x)
                {
                    j+=pas;
                }
                pas>>=1;
            }

            if (v[j]!=x)
            {
                fprintf (fout,"%d\n",-1);
            }
            else
            {
                fprintf (fout,"%d\n",j);
            }
        }
        else if (tip==1)
        {
            while (pas!=0)
            {
                if ((j+pas)<=N && v[j+pas]<=x)
                {
                    j+=pas;
                }
                pas>>=1;
            }

            fprintf (fout,"%d\n",j);
        }
        else
        {
            while (pas!=0)
            {
                if ((j+pas)<=N && v[j+pas]<x)
                {
                    j+=pas;
                }
                pas>>=1;
            }

            fprintf (fout,"%d\n",j+1);
        }
    }

    fclose (fin);
    fclose (fout);
    return 0;
}