Cod sursa(job #1317254)

Utilizator retrogradLucian Bicsi retrograd Data 14 ianuarie 2015 19:16:07
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>

#define NMAX 100001

using namespace std;

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

int V[NMAX], n;

int bsearch(int val) {
    int i, poz = 1;
    for(i=1; i<=n; i<<=1);
    for(i>>=1;i;i>>=1) {
        if(val>=V[poz+i]&&poz+i<=n) {
            poz+=i;
        }
    }
    return poz;
}

int main() {
    int i;
    fin>>n;
    for(i=1; i<=n; i++) {
        fin>>V[i];
    }
    int q, type, val, poz;
    fin>>q;
    while(q--) {
        fin>>type>>val;
        if(type == 0) {
            poz = bsearch(val);
            if(V[poz] == val) fout<<poz;
            else fout<<-1;
        } else if(type == 1) {
            poz = bsearch(val);
            fout<<poz;
        } else {
            poz = bsearch(val-1);
            fout<<poz+1;
        }
        fout<<'\n';
    }
}