Cod sursa(job #1584899)

Utilizator vlad00Vlad Stoleru vlad00 Data 30 ianuarie 2016 16:32:06
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define L 16
#define NMAX 100002

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int v[NMAX],n,m,q,e;

int caut0(int x){
    int i,pas;
    pas=1<<L;
    i=0;
    while(pas){
        if(i+pas<=n&&v[i+pas]<=x)
            i+=pas;
        pas>>=1;
    }
    if(v[i]==x)
        return i;
    return -1;
}

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

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

int main(void) {
    f>>n;
    for(int i=1;i<=n;++i)
        f>>v[i];
    f>>m;
    for(int i=0;i<m;++i){
        f>>q>>e;
        switch(q){
            case 0: {g<<caut0(e); break;}
            case 1: {g<<caut1(e); break;}
            case 2: {g<<caut2(e); break;}
        }
        g<<"\n";
    }
    return 0;
}