Cod sursa(job #1974400)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 27 aprilie 2017 15:45:05
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.7 kb
#include <bits/stdc++.h>

using namespace std;
int N, M;
vector<int> V;

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);

    scanf("%d",&N);
    V.resize(N+1);
    for(int i = 1; i <= N; ++i)
        scanf("%d", &V[i]);

    scanf("%d", &M);
    for(int i = 1; i <= M; ++i)
    {
        int t;
        scanf("%d", &t);
        if(t == 0) {
            int x;
            scanf("%d", &x);
            int li = 1, lf = N, m, ans = -1;
            while(li <= lf) {
                m = li + ((lf - li) >> 1);
                if(V[m] == x) {
                    ans = m;
                    li = m + 1;
                    continue;
                }
                if(V[m] < x)
                    li = m + 1;
                else
                    lf = m - 1;
            }
            printf("%d\n", ans);
            continue;
        }
        if(t == 1) {
            int x;
            scanf("%d", &x);
            int li = 1, lf = N, m , ans = 1;
            while(li <= lf) {
                m = li + ((lf - li) >> 1);
                if(V[m] <= x) {
                    ans = m;
                    li = m + 1;
                }
                else
                    lf = m - 1;
            }
            printf("%d\n", ans);
            continue;
        }

        int x;
        scanf("%d", &x);
        int li = 1, lf = N, m , ans = N;
        while(li <= lf) {
            m = li + ((lf - li) >> 1);
            if(V[m] >= x) {
                ans = m;
                lf = m - 1;
            }
            else
                li = m + 1;
        }
        printf("%d\n", ans);
    }

    return 0;
}