Cod sursa(job #2338123)

Utilizator mariusn01Marius Nicoli mariusn01 Data 7 februarie 2019 02:02:29
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <algorithm>

using namespace std;
int v[100010], n, stanga, putere, op, x, i, m;

ifstream fin ("cautbin.in");
ofstream fout("cautbin.out");
int main () {
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];

    fin>>m;
    for (i=1;i<=m;i++) {
        fin>>op>>x;
        if (op == 0 || op == 1) {
            /// cea mai mare pozitie pe care se afla x sau -1
            stanga = 1; putere = (1<<17);
            while (putere) {
                if (stanga + putere <= n) {
                    if (v[stanga+putere] <= x)
                        stanga += putere;
                }

                putere /= 2;
            }
            if (v[stanga] == x)
                fout<<stanga<<"\n";
            else
                fout<<"-1\n";
        }

        if (op == 2) {
            /// prima pozitie pe care este x si daca nu, unde e un
            /// numar mai mare ca x

            putere = (1<<17);
            stanga = 1;
            while (putere) {

                if (stanga + putere <= n)
                    if (v[stanga + putere] < x)
                        stanga += putere;

                putere /= 2;
            }
            fout<<stanga+1<<"\n";
        }
    }

    return 0;
}