Cod sursa(job #2220500)

Utilizator leonardmMihalcea Nicolae Leonard leonardm Data 11 iulie 2018 23:34:00
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");

int n, vec[100100], m, a, argument;

int cautare_binara1(int st, int dr, int x){
    int m;
    while(st <= dr){
        m = (st+dr)/2;
        if(vec[m] <= x)
            st = m + 1;
        else
            dr = m - 1;
    }
    m = (st+dr)/2;

    if(vec[m]>x) m--;
    if(vec[m]==x) return m;
    return -1;
}

int cautare_binara2(int st, int dr, int x){
    int m;
    while(st<dr){
        m = (st+dr)/2;
        if(vec[m]<=x)
            st = m+1;
        else dr = m;
    }
    m = (st+dr)/2;

    if(vec[m] > x) --m;
    return m;
}

int cautare_binara3(int st, int dr, int x){
    int m;
    while(st < dr){
        m = (st+dr)/2;
        if(vec[m]<x)
            st = m + 1;
        else
            dr = m;
    }
    m = (st+dr)/2;
    if(vec[m] < x)
        ++m;
    return m;
}

void raspuns(int intrebare, int argument){
    if(intrebare == 0){
        out<<cautare_binara1(1, n, argument)<<endl;
    }
    else
    if(intrebare == 1){
        out<<cautare_binara2(1, n, argument)<<endl;
    }
    else
    if(intrebare == 2){
        out<<cautare_binara3(1, n, argument)<<endl;
    }
}

int main()
{
    in>>n;
    for(int i=1; i<=n; i++){
        in>>vec[i];
    }
    in>>m;
    for(int i=1; i<=m; i++){
        in>>a>>argument;
        raspuns(a, argument);
    }
    return 0;
}