Cod sursa(job #2477390)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 20 octombrie 2019 10:50:17
Problema Cautare binara Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.17 kb
#include <iostream>
#include <fstream>

using namespace std;

int a[100001], n, m;

int main()
{
    int mij, st, dr, c, x, i, op;
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin >> n;
    for(i = 1; i <= n; i++)
        fin >> a[i];
    fin >> m;
    for(i = 1; i <= m; i++)
    {
        fin>> op >> x;
        c = -1;
        st = 1;
        dr = n;
        if(op == 0)
        {
            while(st <= dr)
            {
                mij = st + (dr - st) / 2;
                if(a[mij] == x)
                {
                    c = mij;
                    st = mij + 1;
                }
                else if(a[mij] > x)
                    dr = mij - 1;
                else
                    st = mij + 1;
            }
            if(a[mij] == x && a[mij + 1] > x)
                c = mij;
            else if(a[mij] < x && a[mij + 1] > x)
                c = -1;
            if(a[mij] == x && a[mij + 1] == x)
                c = mij + 1;
            fout << c << " \n";
        }
        else if(op == 1)
        {
            while(st <= dr)
            {
                mij = st + (dr - st) / 2;
                if(a[mij] == x)
                    st = mij + 1;
                else if(a[mij] > x)
                    dr = mij - 1;
                else
                    st = mij + 1;
            }
            if(a[mij] <= x && a[mij + 1] > x)
                c = mij;
            else if(a[mij] > x)
                c = mij - 1;
            fout << c << " \n";
        }
        else if(op == 2)
        {
            while(st <= dr)
            {
                mij = st + (dr - st) / 2;
                if(a[mij] == x)
                {
                    c = mij;
                    dr = mij - 1;
                }
                else if(a[mij] > x)
                    dr = mij - 1;
                else
                    st = mij + 1;
            }
            if(a[mij] >= x && a[mij - 1] < x)
                c = mij;
            else if(a[mij] < x && a[mij + 1] >= x)
                c = mij + 1;
            fout << c << " \n";


        }
    }
    return 0;
}