Cod sursa(job #1594009)

Utilizator mateiivanMatei Ivan mateiivan Data 9 februarie 2016 09:12:06
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.99 kb
using namespace std;
#include <iostream>
#include <stdio.h>
#include <fstream>

void search0(int stanga, int dreapta, int key, int *v);
void search1(int stanga, int dreapta, int key, int *v);
void search2(int stanga, int dreapta, int key, int *v);

int main(){

   int key, n = 9, mijloc, flag = 0, len = 0, nrintrebari;

    //nt v[9] = {1,2,3,3,3,3,7,8,9};

    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    cin >> len;

    int v[len];

    for(int i = 0;i < len;i++){
        cin >> v[i];
    }

    cin >> nrintrebari;

    while(nrintrebari > 0){
        cin >> flag;
        cin >> key;
        if(flag == 0){
            search0(0,n, key,v);
        }
        else if( flag == 1){
            search1(0,n,key,v);
        }
        else if(flag == 2){
            search2(0,n,key,v);
        }
        nrintrebari--;
    }

    return 0;
}

void search0(int stanga, int dreapta, int key, int *v){
    int mijloc;
    while(dreapta > stanga + 1){
        mijloc = (dreapta + stanga)/2;

        if(v[mijloc] > key){
            dreapta = mijloc;
        }
        else{
            stanga = mijloc;
        }

    }

    if(v[stanga] != key)
       stanga = -1;
    else
        stanga++;

    cout<<stanga<<endl;
}

void search1(int stanga, int dreapta, int key, int *v){
    int mijloc;
    while(dreapta > stanga + 1){
        mijloc = (dreapta + stanga)/2;

        if(v[mijloc] > key){
            dreapta = mijloc;
        }
        else{
            stanga = mijloc;
        }
    }
    cout<<stanga + 1<<endl;
}

void search2(int stanga, int dreapta, int key, int *v){
    int mijloc;
    while(dreapta > stanga + 1){
        mijloc = (dreapta + stanga)/2;

        if(v[mijloc] > key){
            dreapta = mijloc;
        }
        else{
            stanga = mijloc;
        }
    }

    do{
        key = v[stanga];
        stanga--;
    }while(v[stanga] == key);

    cout<<stanga+2;

}