Cod sursa(job #1795488)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 2 noiembrie 2016 15:59:45
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<cstdio>
using namespace std;
FILE*in=fopen("cautbin.in","r");
FILE*out=fopen("cautbin.out","w");
int N,v[100002],i,t,a,k;
int cautbin(int x)
{
    int step=1;
    int start=0;
    while(step<=N)
    {
        step=step*2;
    }
    while(step)
    {
        if(start+step>N)
        {
            step=step/2;
            continue;
        }
        if(v[start + step]<=x)
        {
            start=start+step;
        }
        step=step/2;
    }
    return start;
}
int M;
int main()
{
    fscanf(in,"%d",&N);
    for(i=0;i<N;i++)
    {
        fscanf(in,"%d",&v[i]);
    }
    fscanf(in,"%d",&M);
    for(i=0;i<M;i++)
    {
        fscanf(in,"%d%d",&t,&a);
        if(t==0)
        {
            if(v[cautbin(a)]==a)
            {
                fprintf(out,"%d\n",cautbin(a)+1);
            }
            else
            {
                if(v[cautbin(a)]<a)
                {
                    fprintf(out,"-1\n");
                }
            }
        }
        if(t==1)
        {
            fprintf(out,"%d\n",cautbin(a)+1);
        }
        if(t==2)
        {
            fprintf(out,"%d\n",cautbin(a-1)+2);
        }
    }
}