Cod sursa(job #2287380)

Utilizator TudorskiSintoma Tudor Tudorski Data 21 noiembrie 2018 20:22:39
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int caut( int x, vector <int>& v ){
    int stg = 1, drp = (int)v.size();
    while( stg <= drp ){
        int mij = ( stg + drp ) / 2;
        if( v[mij] == x ){
            while( ( mij < drp ) && ( v[mij+1] == x ) )
                mij++;
            return mij;
        }
        if ( v[mij] > x )
            drp = mij - 1;
        else
            stg = mij + 1;
    }
    return drp;
}

int main()
{
    vector <int> v;
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");

    int N;
    fin >> N;
    for( int i = 1; i <= N; i++ ){
        int aux;
        fin >> aux;
        v.push_back(aux);
    }
    int M;
    fin >> M;
    for( int i = 1; i <= M; i++ ){
        int intr, nr;
        fin >> intr;
        fin >> nr;
        int poz = caut( nr, v );
        if( intr == 2 ){
            while( ( poz > 0 ) && ( v[poz] == nr ) ) poz--;
            fout << poz + 1 << endl;
        }
        else{
            if( (intr == 1) && (v[poz] != nr)){
                fout << '-1';
            }else
                fout << poz<< endl;
        }
    }

    return 0;
}