Cod sursa(job #807288)

Utilizator patriciatTudor Patricia patriciat Data 4 noiembrie 2012 15:44:28
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 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;
        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)
        return mid;
    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 + 1;
    if (v[mid] < target){
        return cautbin2(v, target, mid, hi);
    }else{
        return cautbin2(v, target, lo, mid);
    }
}

int Cautare(int v[100000], int target, int q,int lo, int hi){
    if(q == 0){
        return cautbin0(v, target, lo, hi);
    }
    if(q == 1){
        return cautbin1(v, target, lo, hi);
    }
    if(q == 2){
        return cautbin2(v, target, lo, hi);
    }
}

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;
        cout << Cautare(v, target, q, 0, n-1) + 1 << endl;
    }
}