Cod sursa(job #1511378)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 26 octombrie 2015 18:26:03
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
//#include <iostream>

using namespace std;

#define LE 100666
#define cout g

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int A[LE];

int bs1(int left,int right,int value)

{
    if (left==right) return (A[left]==value? left :-1);

    while (left<right)
    {
        int mij=(left+right+1)/2;
        if (A[mij]<=value)  left=mij;
        else  right=mij-1;
    }

    if (left>right) return -1;
    return (A[left]==value? left :-1);
}

int bs2(int left,int right,int value)
{
    if (left==right) return right;

    while (left<right)
    {
        int mij=(left+right+1)/2;
        if (A[mij]<=value) left=mij;
        else right=mij-1;
    }
    return left;
}


int main()
{
    int n,m,i,typ,val;

    f>>n;
    for(i=1; i<=n; ++i) f>>A[i];
    f>>m;

    for(i=1; i<=m; ++i,cout<<'\n')
    {
        f>>typ>>val;
        ++typ;
        if (typ==1) cout<<bs1(1,n,val);
        if (typ==2) cout<<bs2(1,n,val);

        if (typ==3)
        {
            if (A[1]>=val)
                cout<<1;
            else
                cout<<bs2(1,n,val-1)+1;
        }
    }

    return 0;
}