Cod sursa(job #1986574)

Utilizator deleted_8384d8b4ff332206DELETED deleted_8384d8b4ff332206 Data 28 mai 2017 17:00:24
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.06 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int main()
{
    int n, m, v[100000], i, x, intreb, d, s, mij, poz;

    f >> n;

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

    f >> m;

    s = 1;
    d = n;

    for(i = 0; i < m; i++)
    {
        f >> intreb >> x;

        if(intreb == 0)
        {
            s = 1;
            d = n;
            poz = -1;

            while(s <= d)
            {
                mij = s + (d-s)/2;

                if(v[mij] == x)
                    poz = mij;

                if(x < v[mij])
                    d = mij - 1;
                else
                    s = mij + 1;
            }

            g << poz << '\n';
        }
        else
            if(intreb == 1)
            {
                s = 1;
                d = n;
                poz = -1;

                while(s <= d)
                {
                    mij = s + (d-s)/2;

                    if(x >= v[mij])
                    {
                        poz = mij;
                        s = mij + 1;
                    }
                    else
                        d = mij - 1;
                }

                g << poz << '\n';
            }
            else if(intreb == 2)
            {
                s = 1;
                d = n;
                poz = -1;
                int ok = 0;
                int pozmin;

                while(s <= d)
                {
                    mij = s + (d-s)/2;

                    if(x <= v[mij])
                    {
                        ok++;
                        poz = mij;
                        d = mij - 1;

                        if(ok == 1)
                            pozmin = mij;

                        if(poz < pozmin)
                            pozmin = poz;

                    }
                    else
                        s = mij + 1;
                }

                g << pozmin;
            }
    }


    return 0;
}