Cod sursa(job #1596580)

Utilizator Arodoet96Teodora Stoleru Arodoet96 Data 11 februarie 2016 10:40:19
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

int n, m;
vector <int> p;

void citire();
void operatii();

int main()
{
    citire();
    operatii();
    return 0;
}

void citire()
{
    int i, x;

    fin>>n;
    for(i=1;i<=n;++i)
    {
        fin>>x;
        p.push_back(x);
    }
}

void operatii()
{
    int i, t, x, poz;

    fin>>m;
    for(i=1;i<=m;++i)
    {
        fin>>t>>x;

        //upper_bound(_, _, x) pointer la primul element mai mare decat x
        //lower_bound(_, _, x) pointer la primul element care nu este mai mic decat x

        if(t==0)
        {
            poz=upper_bound(p.begin(), p.end(), x)-p.begin()-1;
            if(p[poz]!=x) poz=-2;//devine -1
            fout<<poz+1;//numerele sunt memorate de la 0
        }

        if(t==1)
        {
            poz=upper_bound(p.begin(), p.end(), x)-p.begin();
            if(p[poz]!=x) --poz;
            fout<<poz+1;//numerele sunt memorate de la 0
        }

        if(t==2)
            fout<<lower_bound(p.begin(), p.end(), x)-p.begin()+1;//numerele sunt memorate de la 0

        fout<<'\n';
    }
}