Cod sursa(job #1998931)

Utilizator roxana.aeleneiAelenei Roxana roxana.aelenei Data 9 iulie 2017 17:49:09
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n, v[100005], m, t, x;
int bin_search0 (int val)
{
    int st=1, dr=n, mij, poz=-1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij] == val) {
                st=dr+1;
                poz=mij;
        }
        else{
        if(v[mij] < val) st=mij+1;
        else dr=mij-1;
        }
    }
    if(poz > 0)
        while(v[poz+1] == val)
         poz++;
    return poz;
}

int bin_search1 (int val)
{
    int st=1, dr=n, mij, poz=1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij] <= val) {
                st=mij+1;
                poz=mij;
        }
        else dr=mij-1;
    }
    return poz;
}
int bin_search2 (int val)
{
    int st=1, dr=n, mij, poz=1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij] >= val) {
                dr=mij-1;
                poz=dr;
        }
        else dr=mij-1;
    }
    return poz;
}
int main()
{
    in>>n;
    for(int i=1; i<=n; i++)
        in>>v[i];

    in>>m;
    for(int k=1; k<=m; k++)
    {
        in>>t>>x;
        if (t == 0) out<<bin_search0(x)<<'\n';
        if (t == 1) out<<bin_search1(x)<<'\n';
        if (t == 2) out<<bin_search2(x)<<'\n';
    }
    return 0;
}