Cod sursa(job #2075019)

Utilizator razvanradulescuRadulescu Razvan razvanradulescu Data 25 noiembrie 2017 10:47:25
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <cstdio>
using namespace std;

int n, m, a[100050];

void rez(int lg)
{
    int i, pb, x;
    scanf("%d %d\n", &pb, &x);
    if(pb<2)
    {
        for(i = 0; lg; lg>>=1)
            if(i+lg<=n && a[i+lg] <= x)
                i+=lg;
        if(!pb && a[i] != x)
            printf("-1 \n");
        else
            printf("%d \n", i);
        return;
    }

    for(i = n; lg; lg>>=1)
        if(i-lg>0 && a[i-lg] >= x)
            i-=lg;
    printf("%d \n", i);
}

int main()
{
    int lg;
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    scanf("%d\n", &n);
    for(int i = 1; i<=n; ++i)
        scanf("%d ", &a[i]);
    for(lg = 1; lg < n; lg<<=1)
    {}
    scanf("%d \n", &m);
    for(;m; --m)
    {
        rez(lg);
    }
    return 0;
}