Cod sursa(job #1247120)

Utilizator Vlad_317Vlad Panait Vlad_317 Data 22 octombrie 2014 09:39:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>

using namespace std;

#define MAX 100000

int v[MAX+1],n;

int cb0(int x)
{
    int i=0,
    pas=2<<17;

    while(pas!=0)
    {
        if(i+pas<=n)
            if(v[i+pas]<=x)
                i+=pas;
        pas>>=1;
    }
    if(v[i]==x)
        return i;
    else return -1;
}

int cb1(int x)
{
    int i=0,
    pas=2<<17;

    while(pas!=0)
    {
        if(i+pas<=n)
            if(v[i+pas]<=x)
                i+=pas;
        pas>>=1;
    }
    return i;
}

int cb2(int x)
{
    int i=0,
    pas=2<<17;

    while(pas!=0)
    {
        if(i+pas<=n)
            if(v[i+pas]<x)
                i+=pas;
        pas>>=1;
    }
    return i+1;
}



int main()
{
    FILE *fin,*fout;

    fin=fopen("cautbin.in","r");
    fout=fopen("cautbin.out","w");

    int i,m,q,x;

    fscanf(fin,"%d",&n);

    for(i=1;i<=n;i++)
        fscanf(fin,"%d",&v[i]);

    fscanf(fin,"%d",&m);

    for(i=0;i<m;i++)
    {
        fscanf(fin,"%d%d",&q,&x);
        if(q==0)
            fprintf(fout,"%d\n",cb0(x));
        if(q==1)
            fprintf(fout,"%d\n",cb1(x));
        if(q==2)
            fprintf(fout,"%d\n",cb2(x));
    }

    return 0;
}