Cod sursa(job #1875809)

Utilizator Gl0WCula Stefan Gl0W Data 11 februarie 2017 16:41:47
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include<fstream>

using namespace std;

int cautbin(int v[], int dim, int st, int dr, int x){
    int mid;
    mid = st + (dr - st) / 2;
    if(v[dim] == x){
        return dim;
    }
    if(st > dim){
        return -1;
    }
    if(st > dr){
        return dr;
    }

    if(v[mid] <= x){
        return cautbin(v, dim, mid + 1, dr, x);
    }
    else{
        return cautbin(v, dim, st, mid - 1, x);
    }
}
int cautbin2(int v[], int dim, int st, int dr, int x){
    int mid;
    mid = st + (dr - st) / 2;
    if(v[dim] == x){
        return dim;
    }
    if(st > dim){
        return -1;
    }
    if(st > dr){
        return st;
    }

    if(v[mid] >= x){
        return cautbin2(v, dim, st, mid - 1, x);
    }
    else{
        return cautbin2(v, dim, mid + 1, dr, x);
    }
}

int main()
{
    ifstream cin("cautbin.in");
    ofstream cout ("cautbin.out");
    int n, i, m, x, ord;
    cin>>n;
    int v[100010];
    for(i = 1; i <= n; i++){
        cin>>v[i];
    }
    cin>>m;
    for(i = 1; i <= m; i++){
        cin>>ord>>x;
        if(ord == 0){
            if(v[cautbin(v, n, 1, n, x)] != x){
                cout<<-1<<"\n";
            }
            else{
                cout<<cautbin(v, n, 1, n, x)<<"\n";
            }
        }
        else if(ord == 1){
            cout<<cautbin(v, n, 1, n, x)<<"\n";
        }
        else if(ord == 2){
            cout<<cautbin2(v, n, 1, n, x);
        }
    }
    return 0;
}