Cod sursa(job #1823530)

Utilizator Dupree7FMI Ciobanu Andrei Dupree7 Data 6 decembrie 2016 15:52:12
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <fstream>

using namespace std;

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

int n, v[100000];

int CautBin(int x)
{
    int lo = 0, hi = n - 1, mid;

    while(lo <= hi)
    {
        mid = lo + (hi - lo) / 2;
        if(x > mid)
            lo = mid + 1;
        else if(x < mid)
            hi = mid - 1;
        else
            return mid;
    }

    return -1;
}

int main()
{
    int i, a, b, m;

    f >> n;
    for(i = 1; i < n + 1; i++)
        f >> v[i];
    f >> m;

    for(i = 0; i < m; i++)
    {
        f >> a >> b;

        switch(a)
        {

            case 0:
            {
                int c = CautBin(b);
                if(c == -1)
                    g << "-1\n";
                else
                {
                    while(v[c] != v[c + 1])
                        c++;
                    g << c + 1 << "\n";
                }

                break;
            }
            case 1:
            {
                while(CautBin(b) == -1)
                    b--;
                int c = CautBin(b);

                while(v[c] != v[c + 1])
                    c++;
                g << c + 1<< "\n";
                break;
            }
            case 2:
            {
                while(CautBin(b) == -1)
                    b++;
                int c = CautBin(b);

                while(v[c] != v[c - 1])
                    c--;
                g << c - 1 << "\n";
                break;
            }
        }
    }

    return 0;
}