Cod sursa(job #1094357)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 29 ianuarie 2014 12:36:10
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <fstream>

using namespace std;

int v[100010], n;

int bin (int x)
{
    int a = 1, b = n;

    while (a <= b)
    {
        int m = (a + b) / 2;

        if (v[m] == x) return m;
        else if (v[m] > x) b = m - 1;
        else a = m + 1;
    }

    return b;
}

int main ()
{
    freopen ("cautbin.in", "r", stdin);
    ofstream g ("cautbin.out");

    scanf ("%d", &n);

    for (int i = 1; i <= n; i++)
        scanf ("%d", &v[i]);

    int m;
    scanf ("%d", &m);

    for (int i = 1; i <= m ; i++)
    {
        int o, x;

        scanf ("%d %d", &o, &x);

        if (!o)
        {
            int a = bin (x);
            if (v[a] != x)
            {
                g << -1 << '\n';
                continue;
            }

            for (; v[a + 1] == x; a++);

            g << a << '\n';
        }

        else if (o == 1)
        {
            int a = bin (x);

            for (; v[a + 1] == x; a++);

            g << a << '\n';
        }

        else
        {
            int a = bin (x);

            for (; v[a - 1] == x; a--);

            if (v[a] == x) g << a << '\n';
            else g << a + 1 << '\n';
        }
    }

    return 0;
}