Cod sursa(job #1962749)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 12 aprilie 2017 00:39:25
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <iostream>
#include <fstream>

using namespace std;

int a[100010];

int main()
{
    ifstream fin ("cautbin.in");
    ofstream fout ("cautbin.out");
    long long li, lf, mij;
    int n, m, x, y, i, j;
    fin >> n;
    for (i=1; i<=n; i++)
        fin >> a[i];
    fin >> m;
    for (i=1; i<=m; i++)
    {
        fin >> x >> y;
        li=1;
        lf=n;
        mij=(li+lf)/2;
        if (x==0)
        {
            while (li<=lf && y!=a[mij])
            {
                if (y<a[mij])
                    lf=mij-1;
                else
                    li=mij+1;
                mij=(li+lf)/2;
            }
            j=mij;
            while (a[j]==a[mij])
                j++;
            mij=j-1;
            if (a[mij]!=y)
                mij=-1;
        }
        else if (x==1)
        {
            while (li<=lf && y!=a[mij])
            {
                if (y<a[mij])
                    lf=mij-1;
                else
                    li=mij+1;
                mij=(li+lf)/2;
            }
            if (a[mij]==y)
            {
                j=mij;
                while (a[j]==a[mij])
                    j++;
                mij=j-1;
            }
        }
        else
        {
            while (li<=lf && y!=a[mij])
            {
                if (y<a[mij])
                    lf=mij-1;
                else
                    li=mij+1;
                mij=(li+lf)/2;
            }
            if (a[mij]==y)
            {
                j=mij;
                while (a[j]==a[mij])
                    j--;
                mij=j+1;
            }
            else
                mij++;
        }
        fout << mij << "\n";
    }
    return 0;
}