Cod sursa(job #1451737)

Utilizator Vali_DeaconuVali Deaconu Vali_Deaconu Data 18 iunie 2015 12:20:27
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>

#define M 100010

using namespace std;

int v[M];

int rezolvare0 (int st, int dr, int a) {
    int mid;
    while (st <= dr) {
        mid = st + (dr - st) / 2;
        if (v[mid] <= a)
            st = mid + 1;
        else
            dr = mid - 1;
    }
    if (v[dr] == a)
        return dr;
    else
        return -1;
}

int rezolvare1 (int st, int dr, int a) {
    int mid;
    while (st <= dr) {
        mid = st + (dr - st) / 2;
        if (v[mid] <= a)
            st = mid + 1;
        else
            dr = mid - 1;
    }
    return dr;
}

int rezolvare2 (int st, int dr, int a) {
    int mid;

    while (st <= dr) {
        mid = st + (dr - st) / 2;
        if (v[mid] < a)
            st = mid + 1;
        else
            dr = mid - 1;
    }

    return st;
}

int main()
{
    ifstream fin ("cautbin.in");
    ofstream fout ("cautbin.out");

    int n, m, q, a, i;
    fin >> n;
    for (i=1; i<=n; i++)
        fin >> v[i];

    fin >> m;

    for (i=1; i<=m; i++) {
        fin >> q >> a;
        if ( q == 0 )
            fout << rezolvare0 (1, n, a) << '\n';
        if ( q == 1 )
            fout << rezolvare1 (1, n, a) << '\n';
        if ( q == 2 )
            fout << rezolvare2 (1, n, a) << '\n';
    }
    return 0;
}