Cod sursa(job #1426694)

Utilizator EpictetStamatin Cristian Epictet Data 30 aprilie 2015 12:47:17
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int N, M, tip, x, log_N, lg, i, V[100010];

int main()
{
    fin >> N;
    for (int i = 1; i <= N; i++) {
        fin >> V[i];
    }

    for (log_N = 1; log_N <= N; log_N <<= 1)
    lg >>= 1;

    fin >> M;
    while (M--)
    {
        fin >> tip >> x;
        if (tip < 2)
        {
            for (i = 0, lg = log_N; lg; lg >>= 1) {
                if (i + lg <= N && V[i + lg] <= x) {
                    i += lg;
                }
            }

            if (V[i] != x) {
                fout << "-1\n";
            }
            else fout << i << '\n';
        }
        else
        {
            for (i = N, lg = log_N; lg; lg >>= 1) {
                if (i - lg > 0 && V[i - lg] >= x) {
                    i -= lg;
                }
            }
            fout << i << '\n';
        }
    }

    fout.close();
    return 0;
}