Cod sursa(job #1521879)

Utilizator sebinechitasebi nechita sebinechita Data 10 noiembrie 2015 22:09:17
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define MAX 100010
#define cout fout
int a[MAX], n, i, m, t, x, ok, st, dr;

int main()
{
    fin >> n;
    for(i = 1 ; i <= n ; i++)
        fin >> a[i];

    fin >> m;
    while(m--)
    {
        fin >> t >> x;
        if(t == 0)
        {
            st = 1;
            dr = n;
            ok = 0;
            while(st <= dr)
            {
                int mij = (st + dr) >> 1;
                //cout << mij << " " << a[mij] << " " << x << "\n";
                if(a[mij] == x)
                {
                    ok = mij;
                    st = mij + 1;
                }
                else if(a[mij] < x)
                {
                    st = mij + 1;
                }
                else
                {
                    dr = mij - 1;
                }
            }
            if(!ok)
                ok = -1;
            cout << ok << "\n";
        }
        else if(t == 1)
        {
            st = 1;
            dr = n;
            ok = 0;
            while(st <= dr)
            {
                int mij = (st + dr) >> 1;
                if(a[mij] <= x)
                {
                    ok = mij;
                    st = mij + 1;
                }
                else
                {
                    dr = mij - 1;
                }
            }
            cout << ok << "\n";
        }
        else
        {
            st = 1;
            dr = n;
            ok = 0;
            while(st <= dr)
            {
                int mij = (st + dr) >> 1;
                if(a[mij] >= x)
                {
                    ok = mij;
                    dr = mij - 1;
                }
                else
                    st = mij + 1;
            }
            cout << ok << "\n";
        }
    }
}