Cod sursa(job #854645)

Utilizator Aida_SilviaStrimbeanu Aida Silvia Aida_Silvia Data 13 ianuarie 2013 20:14:10
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<stdio.h>

using namespace std;

int v[100000],m,n,i,op,x;

int cautbin(int x,int ls,int ld)
{
    int mid, ok=0;;
    while (ls<ld-1 && ok==0)
    {
        mid=(ls+ld)/2;
        if (x!=v[mid]) ok=1;
           else
        if (x<v[mid]) ld=mid;
            else
        if (x>=v[mid])   ls=mid;

    }
    if ((ls==ld-1) || (x!=v[ls])) return -1;
        else return ls;
}

int cautbin1(int x,int ls,int ld)
{
    int mid;
    while (ls<ld-1)
    {
        mid=(ls+ld)/2;
        if (x<v[mid]) ld=mid;
            else ls=mid;
    }
    return ls;
}

int cautbin2(int x,int ls,int ld)
{
    int mid;
    while (ls<ld-1)
    {
        mid=(ls+ld)/2;
        if (x>v[mid]) ls=mid;
            else ld=mid;

    }
    return ld;
}
int main()
{
    FILE *f=fopen("cautbin.in","r");
    FILE *g=fopen("cautbin.out","w");

    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf(f,"%d",&v[i]);
    fscanf(f,"%d",&m);
    for (i=1;i<=m;i++)
        {
            fscanf(f,"%d%d",&op,&x);
            if (op==0) fprintf(g,"%d\n",cautbin(x,1,n+1));
                else
                    if (op==1) fprintf(g,"%d\n",cautbin1(x,1,n+1));
                else fprintf(g,"%d\n",cautbin2(x,1,n+1));

        }

    fclose(f);
    fclose(g);


    return 0;
}