Cod sursa(job #1401111)

Utilizator dan.ghitaDan Ghita dan.ghita Data 25 martie 2015 17:36:23
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

vector<int> v;

int findX(int x){

    int l = 0, r = v.size() - 1, m;

    while(r != l){
        m = (l + r) / 2;
        if(x >= v[m])
            l = m + 1;
        else
            r = m - 1;
    }

    if(v[m] == x)
        return m;
    else if(v[l] == x)
        return l;
        else
            return -1;
}

int lwBound(int x){

    int l = 0, r = v.size() - 1, m;

    while(l != r) {
        m = (l + r) / 2;
        if(v[m] <= x)
            l = m + 1;
        else
            r = m - 1;
    }
    if(v[l] == x)
        return l;
    else
        return m;
}

int upBound(int x){

    int l = 0, r = v.size() - 1, m;

    while(l != r) {
        m = (l + r) / 2;
        if(v[m] < x)
            l = m + 1;
        else
            r = m - 1;
    }
    if(v[l] == x)
        return l;
    else
        return m;
}


int main()
{
    int n, type, x;

    f>>n;
    while(n--)
        f>>x,
        v.push_back(x);

    f>>n;
    while(n--){
        f>>type>>x;

        switch (type) {
            case 0:
                g<<1 + findX(x)<<'\n';
                break;
            case 1:
                g<<1 + lwBound(x)<<'\n';
                break;
            case 2:
                g<<1 + upBound(x)<<'\n';
                break;
        }
    }




    return 0;
}