Cod sursa(job #1902126)

Utilizator VladS23Vlad Seba VladS23 Data 4 martie 2017 13:45:21
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.33 kb
#include <fstream>

using namespace std;

ifstream in ("cautbin.in");
ofstream out ("cautbin.out");

int v[100000];

int main()
{
    int n, nr, m, x, intr, med, st = 0, dr, j, i, aux;
    bool gasit = 0;
    in >> n;
    dr = n;
    for (i = 0; i < n; i++)
        in >> v[i];

    in >> m;
    for (i = 1; i <= m; i++)
    {
        in >> intr >> x;
        if (intr == 0)
        {
            while (med)
            {
                med = (dr + st) / 2;
                if (x > v[med])
                    st = med;
                if (x < v[med])
                    dr = med;
                if (v[med] == x)
                {
                    gasit = 1;
                    aux = med;
                    j = med;
                    while (v[j] == x)
                    {
                        j++;
                    }
                    break;
                }
            }
            if(gasit == 0)
                out<< "-1" << '\n';
            else
                out << j << '\n';
        }
        dr = n;
        st = 0;
        if(intr == 1)
        {
            while (med)
            {
                med = (dr + st) / 2;
                if (x > v[med])
                    st = med;
                if (x < v[med])
                    dr = med;
                if (v[med] <= x)
                {
                    gasit = 1;
                    aux = med;
                    j = med;
                    while (v[j] <= x && v[j] != 0)
                    {
                        j++;
                    }
                    break;
                }
            }
            out << j << '\n';
        }
        dr = n;
        st = 0;
        if (intr == 2)
        {
            while (med)
            {
                med = (dr + st) / 2;
                if (x > v[med])
                    dr = med;
                if (x < v[med])
                    st = med;
                if (v[med] >= x)
                {
                    gasit = 1;
                    aux = med;
                    j = med;
                    while (v[j] > x)
                    {
                        j--;
                    }
                    break;
                }
            }
            out << j << '\n';
        }

    }
    return 0;
}