Cod sursa(job #1463956)

Utilizator mihaiadelinamihai adelina mihaiadelina Data 21 iulie 2015 21:44:58
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int v[100001], N;

int maxPozEgal(int x) {
    int mijloc, stanga = 1, dreapta = N;

    while (stanga <= dreapta) {
        mijloc = (stanga + dreapta) / 2;
        if (v[mijloc] <= x) {
            stanga = mijloc + 1;
        }
        else {
            dreapta = mijloc - 1;
        }
    }

    if (v[dreapta] == x) {
        return dreapta;
    }
    return -1;
}

int maxPozMaiMicEgal(int x) {
    int mijloc, stanga = 1, dreapta = N;

    while (stanga <= dreapta) {
        mijloc = (stanga + dreapta) / 2;
        if (v[mijloc] <= x) {
            stanga = mijloc + 1;
        }
        else {
            dreapta = mijloc - 1;
        }
    }
    return dreapta;
}

int minPozMaiMareEgal(int x) {
    int mijloc, stanga = 1, dreapta = N;

    while (stanga <= dreapta) {
        mijloc = (stanga + dreapta) / 2;
        if (v[mijloc] < x) {
            stanga = mijloc + 1;
        }
        else {
            dreapta = mijloc - 1;
        }
    }
    return stanga;
}


int main() {
    int mijloc, stanga, dreapta, i, M, x, t;
    fin >> N;

    for (i = 1; i <= N; i++) {
        fin >> v[i];
    }

    fin >> M;

    for (i = 1; i <= M; i++) {
        fin >> t >> x;

        if (t == 0) {
            fout << maxPozEgal(x) << "\n";
        }

        if (t == 1) {
            fout << maxPozMaiMicEgal(x) << "\n";
        }

        if (t == 2) {
            fout << minPozMaiMareEgal(x) << "\n";
        }
    }
    return 0;
}