Cod sursa(job #465219)

Utilizator SpiderManSimoiu Robert SpiderMan Data 23 iunie 2010 17:51:03
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>

const char FIN[] = "cautbin.in", FOU[] = "cautbin.out";

int V[100005] ;
int N, T ;

int main(void)
{
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;

    scanf("%d", &N);

    for (int i = 1; i <= N; ++i)
        scanf ( "%d", &V[i] ) ;

    int aux, cnt, i ;

    for ( aux = 1; aux <= N; aux <<= 1 ) ;


    for ( scanf ( "%d", &T ) ; T ; --T)
    {
        int a, val ;

        scanf ( "%d %d", &a, &val ) ;

        if ( a != 2 )      // 0 x sau 1 x
        {
            for (cnt = aux, i = 0; cnt; cnt >>= 1)
                if (i + cnt <= N && V[i + cnt] <= val)
                    i += cnt;

            if ( a == 0 && V[i] == val || a == 1 )  // verificam daca se gaseste valoarea in sir pentru cazul 0 x
                printf ( "%d\n", i ) ;
            else
                printf ( "-1\n" ) ;
        }
        else               // 2 x
        {
            for (cnt = aux, i = 0; cnt; cnt >>= 1)
                if (i + cnt <= N && V[i + cnt] < val)
                    i += cnt;

            printf("%d\n", ++i);
        }
    }

    return 0;
}