Cod sursa(job #2386911)

Utilizator calin05Bordeanu Calin calin05 Data 23 martie 2019 21:28:07
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>
using namespace std;

int gasesteCelMaiStanga(vector<int> &vect, int x)
{
    int st = 0;
    int dr = vect.size()-1;
    int mid;
    while(st<=dr){
        mid = (st+dr)/2;
        if(x <= vect[mid])
            dr = mid-1;
        else st = mid+1;
    }
    return st;
}

int gasesteCelMaiDreapta(vector<int> &vect, int x)
{
    int st = 0;
    int dr = vect.size()-1;
    int mid;
    while(st<=dr){
        mid = (st+dr)/2;
        if(x >= vect[mid])
            st = mid+1;
        else dr = mid-1;
    }
    return dr;
}


int main()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");

    int n; f >> n;
    vector<int> vect(n);
    for(int i = 0; i<n; ++i)
        f >> vect[i];

    int q; f >> q;
    for(int i = 0; i<q; ++i){
        int query, x; f >> query >> x;
        int raspuns = -1;

        if(query == 1 || query == 0){
            raspuns = gasesteCelMaiDreapta(vect, x);
        }
        else raspuns = gasesteCelMaiStanga(vect, x);

        if(query == 0 && vect[raspuns] != x) g << -1 << '\n';
        else g << raspuns+1 << '\n';
    }

    f.close();
    g.close();
}