Cod sursa(job #1119102)

Utilizator visanrVisan Radu visanr Data 24 februarie 2014 15:17:55
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
using namespace std;

const int NMAX = 100010;

int N, M, V[NMAX], Type, X;

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);

    scanf("%i", &N);
    for(int i = 1; i <= N; ++ i) scanf("%i", &V[i]);
    scanf("%i", &M);
    for(; M; M --)
    {
        scanf("%i %i", &Type, &X);
        if(Type <= 1)
        {
            int Left = 1, Right = N, Mid, Pos;
            while(Left <= Right)
            {
                Mid = (Left + Right) / 2;
                if(V[Mid] <= X) Pos = Mid, Left = Mid + 1;
                else Right = Mid - 1;
            }

            if(Type == 0) printf("%i\n", (V[Pos] == X ? Pos : -1));
            else printf("%i\n", Pos);
        }else
        {
            int Left = 1, Right = N, Mid, Pos;
            while(Left <= Right)
            {
                Mid = (Left + Right) / 2;
                if(V[Mid] >= X) Pos = Mid, Right = Mid - 1;
                else Left = Mid + 1;
            }

            printf("%i\n", Pos);
        }
    }
}