Cod sursa(job #1769968)

Utilizator cosminmaneaCosmin Manea cosminmanea Data 3 octombrie 2016 16:17:47
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#include <vector>

using namespace std;

vector <int> v;

int _0(int li,int lf,int x)
{
    int m;
    while(li<=lf)
    {
        m=li+(lf-li)/2;
        if(x<v[m])
            lf=m-1;
        else li=m+1;
    }
    if(li<1 || v[li-1]!=x)
        return -1;
    return li;
}

int _1(int li,int lf,int x)
{
    int m;
    while(li<=lf)
    {
        m=li+(lf-li)/2;
        if(x<v[m])
            lf=m-1;
        else li=m+1;
    }
    return li;
}

int _2(int li,int lf,int x)
{
    int m;
    while(li<=lf)
    {
        m=li+(lf-li)/2;
        if(x<v[m])
            lf=m-1;
        else li=m+1;
    }
    return lf+1;
}

int main()
{
    FILE *f=fopen("cautbin.in","r");
    FILE *g=fopen("cautbin.out","w");
    int n,m,y,nr,x;
    fscanf(f,"%d",&n);
    int i;
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&y);
        v.push_back(y);
    }
    fscanf(f,"%d",&m);
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d%d",&nr,&x);
        if(nr==0) fprintf(g,"%d\n",_0(1,n,x));
        if(nr==1) fprintf(g,"%d\n",_1(1,n,x));
        if(nr==2) fprintf(g,"%d\n",_2(1,n,x));
    }
    return 0;
}