Cod sursa(job #1247129)

Utilizator rocandu16Badulescu Dan Andrei rocandu16 Data 22 octombrie 2014 09:55:40
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
int log,n;
using namespace std;
int v[100001];
int cb1(int x)
{
    int i=0,pas;
    pas=1<<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 cb2(int x)
{
    int i=0,pas;
    pas=1<<17;
    while(pas!=0)
    {
        if(i+pas<=n)
        {
            if(v[i+pas]<=x)
                i+=pas;
        }
        pas>>=1;

    }

    return i;
}

int cb3(int x)
{
    int i=0,pas;
    pas=1<<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,j,m,a,x;
    fscanf(fin,"%d",&n);
    for(i=1; i<=n; i++)
        fscanf(fin,"%d",&v[i]);
  //  log=1;
  /*  while(2*log<=n)
    {
        log*=2;

    }*/
    fscanf(fin,"%d",&m);

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

    }




    return 0;
}