Cod sursa(job #1802481)

Utilizator xandruGuzun Alexandru xandru Data 10 noiembrie 2016 14:10:07
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 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 && tip == 0) {
                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;
}