Cod sursa(job #1727328)

Utilizator RaduculRadu Mazilu Raducul Data 10 iulie 2016 15:48:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.19 kb
#include <iostream>

using namespace std;

int x[100001], y[100001], tip, numar, mijloc, stanga, dreapta, ok, n, m;

int main () {
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> x[i];
    }
    cin >> m;
    for(int i = 1; i <= m; i++) {
        cin >> tip >> numar;

        switch(tip) {
            case 0: {
                stanga = 1; dreapta = n; ok = 0;
                while(stanga <= dreapta) {
                    mijloc = (stanga + dreapta)/2;
                    if(x[mijloc] == numar) { ok = mijloc; stanga = mijloc + 1; }
                    else {
                        if(x[mijloc] < numar)
                            stanga = mijloc + 1;
                        else
                            dreapta = mijloc - 1;
                    }
                }
                if(ok > 0) y[i] = ok;
                else y[i] = -1;
                break;
            }
            case 1: {
                stanga = 1; dreapta = n; ok = 0;
                while(stanga <= dreapta) {
                    mijloc = (stanga + dreapta)/2;
                    if(x[mijloc] <= numar) { ok = mijloc; stanga = mijloc + 1; }
                    else {
                        if(x[mijloc] < numar)
                            stanga = mijloc + 1;
                        else
                            dreapta = mijloc - 1;
                    }
                }
                if(ok > 0) y[i] = ok;
                else y[i] = -1;
                break;
            }
            case 2: {
                stanga = 1; dreapta = n; ok = 0;
                while(stanga <= dreapta) {
                    mijloc = (stanga + dreapta)/2;
                    if(x[mijloc] >= numar) { ok = mijloc; dreapta = mijloc - 1; }
                    else {
                        if(x[mijloc] < numar)
                            stanga = mijloc + 1;
                        else
                            dreapta = mijloc - 1;
                    }
                }
                if(ok > 0) y[i] = ok;
                else y[i] = -1;
                break;
            }
        }
    }
    for(int i = 1; i <= m; i++) cout << y[i] << endl;
    return 0;
}