Cod sursa(job #1374240)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 5 martie 2015 00:43:20
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
using namespace std;
ifstream in ("cautbin.in");

const int kNMax = 100010;
int n, m, v[kNMax];

void CitireSir() {
    in >> n;
    for (int i = 1; i <= n; ++i)
        in >> v[i];
}

int CautBin1(int st, int dr, int x) {
    int mij;
    while (st <= dr) {
        mij = (st + dr) / 2;
        if (v[mij] <= x)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    mij = (st + dr) / 2;
    if (v[mij] > x)
        --mij;
    if (v[mij] == x)
        return mij;
    return -1;
}

int CautBin2(int st, int dr, int x) {
    int mij;
    while (st < dr) {
        mij = (st + dr) / 2;
        if (v[mij] <= x)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    mij = (st + dr) / 2;
    if (v[mij] > x)
        --mij;
    return mij;
}

int CautBin3(int st, int dr, int x) {
    int mij;
    while (st < dr) {
        mij = (st + dr) / 2;
        if (v[mij] < x)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    mij = (st + dr) / 2;
    if (v[mij] < x)
        ++mij;
    return mij;
}


void Solve()  {
    ofstream out("cautbin.out");
    int m, operatie, x;
    in >> m;
    while (m--) {
        in >> operatie >> x;
        if (!operatie)
            out << CautBin1(1, n, x) << '\n';
        if (operatie == 1)
            out << CautBin2(1, n, x) << '\n';
        if (operatie == 2)
            out << CautBin3(1, n, x) << '\n';
    }
    in.close();
    out.close();
}

int main() {
    CitireSir();
    Solve();
    return 0;
}