Cod sursa(job #1972666)

Utilizator cocoJuOprescu Teodor cocoJu Data 23 aprilie 2017 15:01:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100001];
int n, m;
int cb1(int b)
{
    int s=1, d=n;
    while(s<d){
            m=(s+d+1)/2;
        if(v[m]<=b)
            s=m;
        else
            d=m-1;
    }
        if(v[s]==b) return s;
        else return -1;
}
int cb2(int b)
{
    int poz=0;
    int s=1, d=n;
    while(s<d){
            m=(s+d+1)/2;
        if(v[m]<=b)
            s=m;
        else
            d=m-1;
    }
    return s;
}
int cb3(int b)
{
    int s=1, d=n;

    while(s<d){
          m=(s+d)/2;
        if(v[m]>=b)
            d=m;
        else
            s=m+1;
    }
    return s;
}

int main()
{
    int x, y, i, r;
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>r;
        v[i]=r;
    }
    fin>>m;
    for(i=1;i<=m;i++){
        fin>>y>>x;
        if(y==0)
        {
            int poz=cb1(x);
            while(v[poz] == x)
                poz++;
            poz--;
            fout<<poz<<'\n';
        }
        if(y==1) fout<<cb2(x)<<endl;
        if(y==2) fout<<cb3(x)<<endl;
    }
    return 0;
}