Cod sursa(job #2171022)

Utilizator Ioan_AnghelIoan Anghel Ioan_Anghel Data 15 martie 2018 10:52:24
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>

using namespace std;

const int N = 100001, L = 16;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int v[N], n;

int caut0(int x)
{
    int r = 0, pas = 1 << L;
    while(pas){
        if(r + pas <= n && v[r + pas] <= x){
            r += pas;
        }
        pas /= 2;
    }
    if(r == 0 || v[r] < x){     ///folosim doar daca nu il cautam pe 1
        r = -1;
    }

    return r;
}

int caut1(int x)
{
    int r = 0, pas = 1 << L;
    while(pas != 0){
        if(r + pas <= n && v[ r + pas ] <= x){
            r += pas;
        }
        pas /= 2;
    }
    return r;
}

int caut2(int x)
{
    int r = 0, pas = 1 << L;
    while(pas != 0){
        if(r + pas <= n && !(v[r + pas] >= x)){
            r += pas;
        }
        pas /= 2;
    }
    r++;

    return r;
}

int main()
{
    int nrc, c, x;
    fin >> n;
    for(int i  = 1; i <= n; i++){
        fin >> v[i];
    }
    fin >> nrc;
    for(int j = 0; j < nrc; j++){
        fin >> c >> x;
        if(c == 0){
            fout << caut0(x) << "\n";
        }
        else if(c == 1){
            fout << caut1(x) << "\n";
        }
        else if(c == 2){
            fout << caut2(x) << "\n";
        }
    }


    return 0;
}