Cod sursa(job #973674)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 15 iulie 2013 00:28:33
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n,v[100001],m;

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

    if (lo==0 || v[lo]!=x) return -1;
    return lo;
}

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

    return lo;
}

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

    return hi;
}

int main()
{
    int op,x;

    fin>>n;
    for (int i=1;i<=n;i++) fin>>v[i];
    fin>>m;
    for (int i=1;i<=m;i++)
    {
        fin>>op>>x;
        if (op==0) fout<<op1(x);
        else if (op==1) fout<<op2(x);
        else fout<<op3(x);
        fout<<"\n";
    }
}