Cod sursa(job #807309)

Utilizator patriciatTudor Patricia patriciat Data 4 noiembrie 2012 16:12:40
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include<cstdio>
#include<iostream>

using namespace std;

int cautbin0(int v[100000], int target, int lo, int hi){
    int mid = lo + (hi - lo)/2;
    if (mid == lo){
        if (v[mid] == target)
            return mid + 1;
        return -1;
    }
    if(v[mid] <= target){
        return cautbin0(v, target, mid, hi);
    }else{
        return cautbin0(v, target, lo, mid);
    }
}

int cautbin1(int v[100000], int target, int lo, int hi){
    int mid = lo + (hi - lo)/ 2;
    if (mid == lo){
        if (v[mid + 1] > target)
            return mid + 1;
            else return mid + 2;
    }
    if (v[mid] <= target){
        return cautbin1(v, target, mid, hi);
    }else{
        return cautbin1(v, target, lo, mid);
    }
}

int cautbin2(int v[100000], int target, int lo, int hi){
    int mid = lo + (hi - lo)/2;
    if (mid == lo)
        return mid + 2;
    if (v[mid] < target){
        return cautbin2(v, target, mid, hi);
    }else{
        return cautbin2(v, target, lo, mid);
    }
}

int main(){
    int v[100000];
    int target, n, m, q;
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> v[i];
    }
    cin >> m;
    for (int i = 0; i < m; i++){
        cin >> q >> target;
        if (q == 0){
            cout << cautbin0(v, target, 0, n-1) << endl;
        }
        if (q == 1){
            cout << cautbin1(v, target, 0, n-1) << endl;
        }
        if (q == 2){
            cout << cautbin2(v, target, 0, n-1) << endl;
        }
    }
}