Cod sursa(job #1567253)

Utilizator Emy1337Micu Emerson Emy1337 Data 13 ianuarie 2016 00:14:12
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n,m;
int v[100010];


int BS(int nr)
{
    int st=1,dr=n,m;
    while(st<dr)
    {
        m=(st+dr)/2;
        if(v[m]<=nr)
            st=m+1;
        else
            dr=m-1;
    }
    return st-1;
}


int BS2(int nr)
{
    int st=1,dr=n,m;
    while(st<dr)
    {
        m=(st+dr)/2;
        if(v[m]>=nr)
            dr=m-1;
        else
            st=m+1;
    }
    return st;
}




int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>v[i];
        // cout<<i<<" "<<v[i]<<endl;
    }
    fin>>m;
    for(int i=1; i<=m; i++)
    {
        int tip,nr,x;
        fin>>tip>>nr;
        if(tip==0)
        {
            x=BS(nr);
            if(nr==v[x])
               fout<<x<<"\n";
            else
               fout<<"-1\n";
        }
        else if(tip==1)
            fout<<BS(nr)<<"\n";
        else
            fout<<BS2(nr)<<"\n";
    }

}