Cod sursa(job #1018332)

Utilizator WyvernFMI Stanescu Leonard Wyvern Data 29 octombrie 2013 13:17:22
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("cautbin.in");
ofstream fo("cautbin.out");
long long v[100000],n,m,x;
short q;

long long cb0(long long i,long long j,long long x) {
    long long m=(i+j)/2;
    if (m==i) {
        if (v[m+1]==x)
            return m+1;
        else
            if (v[m]==x)
                return m;
            else
                return -1;
    }
    else {
        if (v[m]<=x)
            cb0(m,j,x);
        else
            cb0(i,m,x);
    }

}

long long cb1(long long i,long long j,long long x) {
    long long m=(i+j)/2;
    if (m==i) {
        if (v[m+1]<=x)
            return m+1;
        else
            return m;
    }
    else {
        if (v[m]<=x)
            cb1(m,j,x);
        else
            cb1(i,m,x);
    }

}

long long cb2(long long i,long long j,long long x) {
    long long m=(i+j)/2;
    if (m==i) {
        if (v[m]>=x)
            return m;
        else
            return m+1;
    }
    else {
        if (v[m]>=x)
            cb2(i,m,x);
        else
            cb2(m,j,x);
    }

}


int main()
{
    fi>>n;
    for (long long i=1;i<=n;i++)
        fi>>v[i];
    fi>>m;
    for (long long i=1;i<=m;i++) {
        fi>>q>>x;
        if (q==0)
            fo<<cb0(1,n,x)<<'\n';
        else
            if (q==1)
                fo<<cb1(1,n,x)<<'\n';
            else
                fo<<cb2(1,n,x)<<'\n';
    }
    return 0;
}