Cod sursa(job #2218581)

Utilizator PetrisorAnghel Petrisor Petrisor Data 5 iulie 2018 08:34:48
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#include <fstream>
using namespace std;

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

int a[100001];
int cautbin (int val, int n){
    int pos = 0, i;
    for (i = 20; i >= 0; i--) {
        if ((pos + (1 << i) <= n) && (a[pos + (1 << i)] <= val)) {
            pos += (1 << i);
        }
    }
    return pos;
}


int main() {
    int t, n, m, x, i;
    f >> n;
    for (i = 1; i <= n; i++)
        f >> a[i];

    f >> m;
    for (i = 1; i <= m; i++) {
        f >> t >> x;
        if (t == 0) {
            int poz;
            poz = cautbin(x, n);
            if (a[poz] == x)
                g << poz << endl;
            else
                g << " -1 " << endl;

        }

        if (t == 1) {
            g << cautbin(x, n) << endl;
        }

        if (t == 2) {
            g << cautbin(x - 1, n) + 1 << endl;
        }
    }
    return 0;
}