Cod sursa(job #665005)

Utilizator BugirosRobert Bugiros Data 21 ianuarie 2012 13:19:28
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>
using namespace std;

const int MAXN = 100010;

short tip_test;
int x,n;

int v[MAXN];

int cautare_binara (int nr)
{
    int poz = 0;
    for (int pas = 1 << 18;pas >= 1;pas >>= 1)
        if (poz + pas < n && v[poz + pas] < nr)
            poz += pas;
    return poz;
}

void interpretare_test()
{
    int poz;
    if (tip_test == 0)
    {
        poz = cautare_binara(x + 1);
        if (v[poz] == x)
            printf ("%d",poz);
        else printf ("-1");
    }
    if (tip_test == 1)
    {
        poz = cautare_binara(x + 1);
        if (v[poz] <= x)
            printf ("%d",poz);
        else printf ("-1");
    }
    if (tip_test == 2)
    {
        poz = cautare_binara(x);
        if (v[poz + 1] >= x)
            printf ("%d",poz + 1);
        else printf ("-1");
    }
    printf ("\n");
}

void citire()
{
    int nr_teste;
    freopen ("cautbin.in","r",stdin);
    freopen ("cautbin.out","w",stdout);
    scanf("%d",&n);
    for (int i = 1;i <= n;++i)
        scanf ("%d",&v[i]);
    scanf ("%d",&nr_teste);
    for (int i = 1;i <= nr_teste;++i)
    {
        scanf ("%hd %d",&tip_test,&x);
        interpretare_test();
    }
}

int main()
{
    citire();
    return 0;
}