Cod sursa(job #1247121)

Utilizator dragos_vecerdeaVecerdea Dragos dragos_vecerdea Data 22 octombrie 2014 09:41:20
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <stdio.h>
FILE *fin ,*fout;
long long v[200001] ,m ,n ,q ,x ,i ,j ,log ,pas;
int main()
{
    fin = fopen("cautbin.in" ,"r");
    fout = fopen ("cautbin.out" ,"w");
    fscanf(fin ,"%d" ,&n);
    for(i=1;i<=n;i++)
    {
        fscanf(fin ,"%d" ,&v[i]);
    }
    log=1;
    while(2*log <= n)
    {
        log=log*2;
    }
    fscanf (fin , "%d" ,&m);
    for(j=1;j<=m;j++)
    {
        fscanf (fin ,"%d" ,&q);
        if(q==0)
        {
            fscanf (fin ,"%d" , &x);
            if(x>v[n]) fprintf(fout ,"-1");
            else
            {
                i=0;
                pas=1;
                pas=log;
                while(pas!=0)
                {
                    if(v[i+pas]<x)i+=pas;
                    pas/=2;
                }
                if(v[i+1]!=x)fprintf(fout ,"%d" ,(i+1));
                else fprintf(fout ,"-1");
            }
        }
        if(q==1)
        {
            fscanf(fin ,"%d" , &x);
            i=0;
            pas=1;
            pas=log;
            while(pas!=0)
            {
                if(v[i+pas]<=x)i+=pas;
                pas/=2;
            }
            fprintf(fout ,"%d" ,i);
        }
        if(q==2)
        {
            i=0;
            pas=1;
            pas=log;
            while(pas!=0)
            {
                if(v[i+pas]<x)i+=pas;
                pas/=2;
            }
            fprintf(fout ,"%d" ,i+1);
        }
    }
    return 0;

}