Cod sursa(job #2079450)

Utilizator tudoras8tudoras8 tudoras8 Data 1 decembrie 2017 13:26:06
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MAXN = 100001;
int n, a[MAXN];

int main(int argc, const char * argv[]) {
    ifstream cin("cautbin.in");
    ofstream cout("cautbin.out");
    
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    
    int m;
    cin >> m;
    while (m--) {
        int op, x;
        cin >> op >> x;
        
        int pas = 1 << 16;
        int r = 0;
        switch (op) {
            case 0:
                while (pas > 0) {
                    if (r + pas <= n && a[r + pas] <= x) {
                        r += pas;
                    }
                    
                    pas >>= 1;
                }
                
                if (a[r] == x) {
                    cout << r;
                } else {
                    cout << -1;
                }
                break;
            case 1:
                while (pas > 0) {
                    if (r + pas <= n && a[r + pas] <= x) {
                        r += pas;
                    }
                    
                    pas >>= 1;
                }
                
                cout << r;
                break;
            case 2:
                while (pas > 0) {
                    if (r + pas <= n && a[r + pas] < x) {
                        r += pas;
                    }
                    
                    pas >>= 1;
                }
                
                cout << r + 1;
                break;
        }
        cout << '\n';
    }
    
    return 0;
}