Cod sursa(job #1850782)

Utilizator GeorginskyGeorge Georginsky Data 18 ianuarie 2017 21:59:41
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;

int bS(int v[], int s, int e){
    int m, r=s+1, l=0;
    while(r-l>1){
        m=l+(r-l)/2;
        if(v[m]<=e)l=m;
        else r=m;
    }
    if(l>0&&l<=s&&v[l]==e)return l;
    return -1;
}

int bS2(int v[], int s, int e){
    int m, r=s+1, l=0;
    while(r-l>1){
        m=l+(r-l)/2;
        if(v[m]<=e)l=m;
        else r=m;
    }
    if(l>0&&l<=s&&v[l]<=e)return l;
    return -1;
}

int bS3(int v[], int s, int e){
    int m, r=s+1, l=0;
    while(r-l>1){
        m=l+(r-l)/2;
        if(v[m]>=e)r=m;
        else l=m;
    }
    if(r>0&&r<=s&&v[r]>=e)return r;
    return -1;
}

int a[100005], n, m, q, x;
int main(){
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    in>>n;
    for(int i=1; i<=n; i++)in>>a[i];
    in>>m;
    for(int i=1; i<=m; i++){
        in>>q>>x;
        if(q==0){
            out<<bS(a, n, x)<<"\n";
        }else if(q==1){
            out<<bS2(a, n, x)<<"\n";
        }else{
            out<<bS3(a, n, x)<<"\n";
        }
    }
    return 0;
}