Cod sursa(job #1487987)

Utilizator bpalaniciPalanici Bogdan bpalanici Data 17 septembrie 2015 19:11:22
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

int n, nr, op, m, poz;
int v[100005];

int cbin(int m)
{
    long long nr = 1;
    int rezultat = 0;
    for (nr = 1; nr <= n; nr <<= 1);
    for (; nr; nr >>= 1)
        if (rezultat + nr <= n && v[rezultat + nr] <= m)
        rezultat += nr;
    return rezultat;
}

int main()
{
    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", &m);
    for (int i = 1; i <= m; i++)
    {
        scanf("%d %d", &op, &m);
        poz = cbin(m);
        if (!op) printf("%d\n", v[poz] == m ? poz : -1);
        else if (op == 1) printf("%d\n", poz);
        else printf("%d\n", cbin(m - 1) + 1);
    }
    return 0;
}