Cod sursa(job #1008942)

Utilizator lucianRRuscanu Lucian lucianR Data 12 octombrie 2013 11:54:50
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>
#define L_MAX 100010

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

int v[L_MAX], N, M, x;

int bsearch(int lo, int hi)
{
    lo = 1;
    hi = N;
    while (lo <= hi)
    {
        int mid = lo + (hi-lo)/2;
        /*if (v[mid] == x)
            return mid;*/
        if (v[mid] <= x)
            lo = mid+1;
        else
            hi = mid-1;
    }
    if(v[hi] == x) return hi;
    else return -1;

}


int b1search(int lo, int hi)
{
    lo = 1;
    hi = N;
    while (lo <= hi)
    {
        int mid = lo + (hi-lo)/2;
        /*if (v[mid] == x)
            return mid;*/
        if (v[mid] <= x)
            lo = mid+1;
        else
            hi = mid-1;
    }
    return hi;

}

int b2search(int lo, int hi)
{
    lo = 1;
    hi = N;
    while (lo <= hi)
    {
        int mid = lo + (hi-lo)/2;
        /*if (v[mid] == x)
            return mid;*/
        if (v[mid] >= x)
            hi = mid-1;
        else
            lo = mid+1;
    }
    return lo;
}


int main()
{
    in >> N;
    for(int i = 1; i <= N; i++)
        in >> v[i];
    in >> M;
    for(int i = 0; i < M; i++)
    {
        int t;
        in >> t;
        if(t == 0)
        {
            in >> x;
            out << bsearch(1, N) << "\n";
        }
        if(t == 1)
        {
            in >> x;
            out << b1search(1, N) << "\n";
        }
        if(t == 2)
        {
            in >> x;
            out << b2search(1, N) << "\n";
        }

    }
    in.close();
    out.close();
    return 0;
}