Cod sursa(job #1428799)

Utilizator pufstarDragos Gheorghiu pufstar Data 5 mai 2015 09:19:18
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cautbin.in"); ofstream g("cautbin.out");
int main()
{
    int n, m, A[100010], tip, poz, x;
    f>>n;
    for(int i=0; i<n; i++) f>>A[i]; /// Se citeste vectorul
    f>>m;
    for(;m;m--)
    {
        f>>tip>>x; /// Citim tipul intrebarii si elementul cautat
        if(tip==0)
        {
            poz=upper_bound(A, A+n, x) - A; /// Calculam prima pozitie unde A[poz] > x
            poz--; /// Scadem o unitate din poz deoarece functia returneaza primul element care il depaseste
                   /// pe x, iar noi avem nevoie de pozitia anterioara
            if(poz>=0 and poz<n and A[poz]==x) /// Verificam daca poz satisface conditiile
                g<<poz+1<<'\n'; /// Afisam pozitia marita cu o unitate, deoarece am citit vectorul de la 0
            else g<<-1<<'\n';
        }
        else if(tip==1)
        {
            poz=upper_bound(A, A+n, x) - A; /// Calculam prima pozitie unde A[poz] > x, deci, din nou
                                            /// Ne intereseaza pozitia anterioara (unde A[poz] <= x)
            // poz--;
            /// Nu mai avem nevoie de conditia de la tipul 0
            g<<poz<<'\n';
        }
        else if(tip==2)
        {
            poz=lower_bound(A, A+n, x) - A; /// Functia returneaza exact pozitia de care ne intereseazaa
            g<<poz+1<<'\n'; /// Din nou, afisam pozitia marita cu o unitate, deoarece am citit vectorul de la 0
        }
    }
    g.close(); return 0;
}