Cod sursa(job #2325882)

Utilizator cmv05Catalina Maria Vlad cmv05 Data 23 ianuarie 2019 00:52:46
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.07 kb
#include <fstream>

using namespace std;

ifstream cin ("cautbin.in");
ofstream cout ("cautbin.out");

const int MAX = 1e5 + 14; // 10 ^ 5 + 14
int V[MAX];
int main()
{
    int N, i, M;
    cin>>N;
    // for (initializare; conditie; incrementare/decrementare)
    //for (i=N, i<=N, i++) - gresit
    for (i = 1; i <= N; ++ i)
        cin>>V[i];

    cin>>M;

    for (i=1; i<=M; i++)
    {
        int tip, x;
        cin >> tip >> x;
        if (tip == 0)
        {
            int left=1;
            int right=N;
            int gasit=1;

            while (left <= right)
            {
                int mijloc = (left + right)/2;

                if (V[mijloc] <= x)
                {
                    left=mijloc+1;
                    gasit=mijloc;
                }
                else
                {
                    right= mijloc-1;
                }

            }
            if (V[gasit]==x)
                cout <<gasit<<'\n';
            else
                cout << -1<<'\n';
        }
        else if (tip ==1)
        {
            int left=1;
            int right=N;
            int gasit =1;

            while (left <= right)
            {
                int mijloc = (left + right)/2;

                if (V[mijloc]<=x)
                {
                    left=mijloc+1;
                    gasit=mijloc;
                }
                else
                {
                    right= mijloc-1;
                }
            }
            cout <<gasit<<'\n';
        }
        else if (tip==2)
        {
            int left=1;
            int right=N;
            int gasit =1;

            while (left <= right)
            {
                int mijloc = (left + right) / 2;

                if (x <= V[mijloc])
                {
                    right = mijloc - 1;
                    gasit = mijloc;
                }
                else
                    left = mijloc + 1;
            }
            cout << gasit << '\n';
        }
    }
    return 0;
}