Cod sursa(job #1349737)

Utilizator bullseYeIacob Sergiu bullseYe Data 20 februarie 2015 14:14:22
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#define DMAX 100010
using namespace std;

int nr[DMAX], n, m;
int binary1(int);
int binary2(int);

int main()
{
    int i, op, x, rez;
    FILE*fin=fopen ("cautbin.in", "r");
    FILE*fout=fopen ("cautbin.out", "w");
    fscanf(fin, "%d", &n);
    for (i=1; i<=n; ++i)
        fscanf(fin, "%d", &nr[i]);
    fscanf(fin, "%d", &m);
    for (i=1; i<=m; ++i)
    {
        fscanf(fin, "%d %d", &op, &x);
        if (op<2)
        {
            rez=binary1(x);
            if (!op && nr[rez]!=x)
                rez=-1;
            fprintf(fout, "%d\n", rez);
        }
            else
            fprintf(fout, "%d\n", binary2(x));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}

int binary1 (int x)
{
    int st=0, dr=n+1, mijl;
    while (dr-st>1)
    {
        mijl=(st+dr)/2;
        if (x>=nr[mijl])
            st=mijl;
            else
            dr=mijl;
    }
    return st;
}

int binary2 (int x)
{
    int st=0, dr=n+1, mijl;
    while (dr-st>1)
    {
        mijl=(st+dr)/2;
        if (x<nr[mijl])
            dr=mijl;
            else
            st=mijl;

    }
    return dr;
}