Cod sursa(job #1665816)

Utilizator Cristi01052Tudorache Christian Cristi01052 Data 27 martie 2016 13:21:31
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <stdio.h>

using namespace std;
const int N = 100005, P = 1 << 21;
int v[N];
int main()
{
    FILE *in, *out;
    in = fopen ("cautbin.in", "r");
    out = fopen ("cautbin.out", "w");
    int n,m;
    fscanf(in, "%d", &n);
    int i;
    for(i = 0; i < n; i++)
        fscanf(in, "%d", &v[i]);
    fscanf(in, "%d", &m);
    int cerinta, x, poz, put;
    for(i = 0; i < m; i++)
    {
        put = P;
        poz = 0;
        fscanf(in, "%d%d", &cerinta, &x);
        if (cerinta == 0)
        {
            while (put > 0)
            {
                if (put + poz < n && v[put + poz] < x)
                    poz += put;
                put >>= 1;
            }
            if (v[poz + 1] == x )
                fprintf (out, "%d\n", poz + 2);
            else
                fprintf (out, "-1\n");
        }
        if (cerinta == 1)
        {
            while (put > 0)
            {
                if (put + poz < n && v[put + poz] <= x)
                    poz += put;
                put >>= 1;
            }
            fprintf (out, "%d\n", poz + 1);
        }
        if (cerinta == 2)
        {
            while (put > 0)
            {
                if (put + poz < n && v[put + poz] < x)
                    poz += put;
                put >>= 1;
            }
            fprintf (out, "%d\n", poz + 2);
        }
    }
    return 0;
}