Cod sursa(job #1727378)

Utilizator petrooPetru G petroo Data 10 iulie 2016 17:40:01
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <stdio.h>
#include <vector>
std::vector<long> numere;
long bin_search0(std::vector<long> numere, int val)
{
    int lo = -1,hi = numere.size();
    while(hi - lo > 1)
    {
        int mid = lo + (hi-lo)/2;
        if(numere[mid] <= val)
            lo = mid;
        else
            hi = mid;
    }
    if(lo == -1 || numere[lo] != val)
        return -1;
    return lo +1;
}
long bin_search1(std::vector<long> numere, int val)
{
    int lo = -1,hi = numere.size();
    while(hi - lo > 1)
    {
        int mid = lo + (hi-lo)/2;
        if(numere[mid] <= val)
            lo = mid;
        else
            hi = mid;
    }
    return hi;
}

long bin_search2(std::vector<long> numere, int val)
{
    int lo = -1,hi = numere.size();
    while(hi - lo > 1)
    {
        int mid = lo + (hi-lo)/2;
        if(numere[mid] < val)
            lo = mid;
        else
            hi = mid;
    }
    return hi + 1;
}
int main()
{
    int n,m,i,x,vecin;
    int opt;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(i = 1; i <= n; i++)
        scanf("%lld",&x),numere.push_back(x);
    scanf("%lld",&m);
    for(i = 1; i <= m; i++)
    {
        scanf("%d %lld",&opt,&vecin);
        if(opt == 0)
            printf("%d\n",bin_search0(numere,vecin));
        else if(opt == 1)
            printf("%d\n",bin_search1(numere,vecin));
        else if(opt == 2)
            printf("%d\n",bin_search2(numere,vecin));

    }
    return 0;
}