Cod sursa(job #1835734)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 27 decembrie 2016 13:13:44
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

    int n;
    fin>>n;

    vector<int> v(n);
    for(auto &r : v) fin>>r;

    int m;
    fin>>m;

    while(m--){
        int t,x;
        fin>>t>>x;

        switch(t){
            case 0: {
                auto upb = upper_bound(v.begin(),v.end(),x);
                if(upb!=v.begin()) upb--;

                if(*upb == x) fout<<upb-v.begin()+1<<'\n';
                else fout<<"-1\n";
            } break;

            case 1:{
                auto upb2 = lower_bound(v.rbegin(),v.rend(),x,std::greater<int>());
                fout<<v.rend()-upb2<<'\n';
            } break;

            case 2:{
                auto lob = lower_bound(v.begin(),v.end(),x);
                fout<<lob-v.begin()+1<<'\n';
            } break;
        }
    }
}