Cod sursa(job #1788228)

Utilizator Mihai_PredaPreda Mihai Dragos Mihai_Preda Data 25 octombrie 2016 20:09:45
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

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

int n, m;
vector<int> v;

void rez0(int x)
{
    int st = 1;
    int dr = n;
    int rasp = -1;
    while(st <= dr)
    {
        int mid = (st + dr) / 2;
        if(v[mid] <= x)
        {
            rasp = mid;
            st = mid + 1;
        }
        else
            dr = mid - 1;
    }
    out << rasp << "\n";
}

void rez1(int x)
{
    int st = 1;
    int dr = n;
    int rasp;
    while(st <= dr)
    {
        int mid = (st + dr) / 2;
        if(v[mid] <= x)
        {
            rasp = mid;
            st = mid + 1;
        }
        else
            dr = mid - 1;
    }
    out << rasp << "\n";
}

void rez2(int x)
{
    int st = 1;
    int dr = n;
    int rasp;
    while(st <= dr)
    {
        int mid = (st + dr) / 2;
        if(v[mid] >= x)
        {
            rasp = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
    }
    out << rasp << "\n";
}

int main()
{
    in >> n;
    v.resize(n + 1);
    for(int i = 1; i <= n; ++i)
        in >> v[i];
    in >> m;
    int tip, x;
    for(int i = 1; i <= m; ++i)
    {
        in >> tip >> x;
        if(tip == 0)
        {
            rez0(x);
        }
        else if(tip == 1)
        {
            rez1(x);
        }
        else if(tip == 2)
        {
            rez2(x);
        }
    }
    return 0;
}