Cod sursa(job #1893391)

Utilizator mihai.alphamihai craciun mihai.alpha Data 25 februarie 2017 17:40:10
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <iostream>

using namespace std;

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

#define MAX 100000
#define LG 1 << 17

int v[MAX];
int N, M;

inline int caut0(int val)  {
    int r = -1, pas = LG;
    while(pas)  {
        if(r + pas < N && v[r + pas] <= val)  {
            r += pas;
        }
        pas >>= 1;
    }
    if(v[r + pas] == val)
        return r;
    return -1;
}

inline int caut1(int val)  {
    int r = -1, pas = LG;
    while(pas)  {
        if(r + pas < N && v[r + pas] <= val)  {
            r += pas;
        }
        pas >>= 1;
    }
    return r;
}

inline int caut2(int val)  {
    int r = -1, pas = LG;
    while(pas)  {
        if(r + pas < N && v[r + pas] < val)
            r += pas;
        pas >>= 1;
    }
    return r + 1;
}

int main()  {
    f >> N;
    for(int i = 0;i < N;i++)
        f >> v[i];
    f >> M;
    for(int i = 0;i < M;i++)  {
        int op, x;
        f >> op >> x;
        switch(op)  {
            case 0:
            g << caut0(x) + 1 << "\n";
            break;
            case 1:
            g << caut1(x) + 1 << "\n";
            break;
            case 2:
            g << caut2(x) + 1 << "\n";
            break;
        }
    }
    f.close();
    g.close();
    return 0;
}