Cod sursa(job #795612)

Utilizator luckyme91wiz kid luckyme91 Data 9 octombrie 2012 00:25:03
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 2.03 kb
#include <fstream>

using namespace std;
int x[100001];
int begin, end, n, mid;
ofstream out ("cautbin.out", ofstream::out);

void solve (int y, int s) {
    begin = 0, end = n - 1;
    while (end - begin > 1)
    {
        mid = begin + (end - begin)/2;
        if (y == 0)
        {
            if (x[mid] > s)
                end = mid - 1;
            else
                begin = mid;
        }
        else if (y == 1)
        {
            if (x[mid] > s)
                end = mid;
            else
                begin = mid;
            if (end - begin <= 1)
            {
                if (x[end] == s)
                    out << end + 1 << endl;
                else if (x[begin] == s)
                    out << begin + 1 << endl;
                else if (x[end] < s)
                    out << end + 1 << endl;
                else out << begin + 1 << endl;
            }
        } else if (y == 2)

        {
            if (x[mid] > s)
                end = mid;
            else
                begin = mid;
            if (end - begin <= 1)
            {
                if (x[begin] == s)
                    out << begin + 1 << endl;
                else if (x[end] == s)
                    out << end + 1 << endl;
                else if (x[begin] > s)
                    out << begin + 1 << endl;
                else out << end + 1 << endl;
            }
        }
    }
    if (y == 0)
    {
        if (begin == end && x[begin] == s)
            out << begin + 1 << endl;
        else if (begin == end && x[begin] != s)
            out << -1 << endl;
        else if (begin != end)
        {
            if (x[begin + 1] == s)
                out << begin + 2 << endl;
            else if (x[begin] == s)
                out << begin + 1 << endl;
            else out << -1 << endl;
        }
    }

}


int main () {
    int q, y, s;
    ifstream in ("cautbin.in", ifstream::in);


    in >> n;
    for (int i = 0; i < n; i++)
    {
        in >> x[i];
    }
    in >> q;
    while (q--)
    {
        in >> y >> s;
        solve (y, s);
    }
}