Cod sursa(job #2079516)

Utilizator tudoras8tudoras8 tudoras8 Data 1 decembrie 2017 14:48:37
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 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: {
                int lo = 1, hi = n;
                while (lo < hi) {
                    int mid = lo + (hi - lo + 1) / 2;
                    
                    if (a[mid] > x) {
                        hi = mid - 1;
                    } else {
                        lo = mid;
                    }
                }
                cout << lo;
                break;
            }
            case 2: {
                int lo = 1, hi = n;
                while (lo < hi) {
                    int mid = lo + (hi - lo) / 2;
                    
                    if (a[mid] >= x) {
                        hi = mid;
                    } else {
                        lo = mid + 1;
                    }
                }
                cout << lo;
            }
        }
        cout << '\n';
    }
    
    return 0;
}