Cod sursa(job #1209939)

Utilizator robert.onesimRobert Onesim robert.onesim Data 18 iulie 2014 21:32:38
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100005];
int n,mid;
/*void caut0(int lo, int hi, int x)
{
    int sol=-1;
    while(lo<=hi)
    {
        mid=(lo+hi)/2;
        if(v[mid]<x) lo=mid+1;
        else
        {
            if(v[mid]>x)hi=mid-1;
            else {sol=mid;lo=mid+1;}
        }
    }
    fout<<sol<<"\n";
}
void caut1(int lo, int hi , int x)
{
    int sol;
    while(lo<=hi)
    {
        mid=(lo+hi)/2;
        if(v[mid]>x) hi=mid-1;
        else {sol=mid; lo=mid+1;}
    }
    fout<<sol<<"\n";
}
void caut2(int lo, int hi, int x)
{
    int sol=0;
    while(lo<=hi)
    {
        mid=(lo+hi)/2;
        if(v[mid]<x) lo=mid+1;
        else {sol=mid; hi=mid-1;};
    }
    fout<<sol<<"\n";
}*/
int main()
{
    int m,a,b;
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(int i=1;i<=m;i++)
        {
            fin>>a>>b;
            if(a==0)
            {
                int poz=upper_bound(v+1,v+n+1,b)-v-1;
                if(v[poz]==b && poz<=n && poz>=1) fout<<poz<<"\n";
                else fout<<-1<<"\n";
            }
            else if(a==1)
                {
                    int poz = upper_bound(v + 1, v + n + 1, b)- v-1 ;
                        fout<<poz<<"\n";
                }
                    else
                    {
                        int poz = lower_bound(v + 1, v + n + 1, b)-v;
                        fout<<poz<<"\n";

                    }
        }

}