Cod sursa(job #1011381)

Utilizator c0rn1Goran Cornel c0rn1 Data 16 octombrie 2013 19:56:52
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, a[100001], t, op, nr;

void citire()
{
    fin>>n;
    for (int i=1; i<=n; i++)
        fin>>a[i];
    fin>>t;
}

int cautbinara(int st, int dr, int val, int op)
{
    int mij;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        if (a[mij]==val)
        {
            if (op==0 || op==1)
            {
                while(a[mij]<=val && mij<=dr)
                    mij++;
                return mij-1;
            }
            if (op==2)
            {
                while (a[mij]>=val && mij>=st)
                    mij--;
                return mij+1;
            }
        }
        if (a[mij]<=val)
            st=mij+1;
        else
            dr=mij-1;
    }
    return -1;
}

int main()
{
    citire();
    for (int i=0; i<t; i++)
    {
        fin>>op>>nr;
        fout<<cautbinara(1, n, nr, op)<<"\n";
    }
    return 0;
}