Cod sursa(job #1161337)

Utilizator supermitelArdelean Razvan Mitel supermitel Data 31 martie 2014 10:27:48
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

int low = -1, up = 0;
int a[100010];
int n, m;

int cautbin(int val, int tip)
{
    int step = 1, i;
    while(step < n)
        step <<= 1;
    step >>= 1;
    for(i = 0; step; step >>= 1)
        if(a[i+step] - val <= tip)
            i+=step;
    return i;
}

void citire()
{
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
        scanf("%d", &a[i]);
}

void solve()
{
    scanf("%d", &m);
    int p, x, t;
    while(m--)
    {
        scanf("%d%d", &t, &x);
        switch(t)
        {
        case 0:
            p = cautbin(x, up);
            if(a[p] == x)
                printf("%d\n", p+1);
            else
                printf("-1\n");
            break;
        case 1:
            p = cautbin(x, up);
            if(a[p]!=x)
                p++;
            printf("%d\n", p+1);
            break;
        case 2:
            p = cautbin(x, low)+1;
            printf("%d\n", p+1);
        }
    }
}

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    citire();
    solve();
    return 0;
}