Cod sursa(job #1317277)

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

#define NMAX 100001


using namespace std;

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

unsigned long V[NMAX];
int n;

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

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