Cod sursa(job #1488014)

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

using namespace std;

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

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