Cod sursa(job #1008283)

Utilizator lucianRRuscanu Lucian lucianR Data 10 octombrie 2013 19:14:17
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 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)
{
    int mid;
    hi = N;
    lo = 1;
    while (hi - lo >= 0)
    {
        mid = (lo + hi) / 2;
        if (v[mid] <= x)
            lo = mid+1;
        else
            hi = mid-1;
    }
    if (hi ==N || v[hi] != x)
        return -1;
    else
        return hi;
}


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

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


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;
}