Cod sursa(job #1401170)

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

vector<int> v;

int findX(int x){

    int indx = 0;
    for(int step = 1 << 30; step > 0; step >>= 1)
        if(indx + step < v.size() && v[indx + step] <= x){
            indx += step;
        }

    return (v[indx] == x) ? indx + 1 : -1;
}

int lwBound(int x){

    int indx = 0;

    for(int step = 1 << 30; step > 0; step >>= 1)
        if(indx + step < v.size() && v[indx + step] <= x)
            indx += step;
    return 1 + indx;
}

int upBound(int x){

    int indx = 0;

    for(int step = 1 << 30; step > 0; step >>= 1)
        if(indx + step < v.size() && v[indx + step] < x)
            indx += step;

    return 2 + indx;
}




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<<findX(x)<<'\n';
                break;
            case 1:
                g<<lwBound(x)<<'\n';
                break;
            case 2:
                g<<upBound(x)<<'\n';
                break;
        }
    }




    return 0;
}