Cod sursa(job #1498210)

Utilizator istrate.cristianIstrate Cristian istrate.cristian Data 8 octombrie 2015 09:41:07
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int v[100005],li,ls,n,gasit,mij;

int dr(int x)
{
    li=1;
    ls=n;
    gasit=0;
    while(li<ls && gasit==0)
    {
        mij=(li+ls)/2;
        if(v[mij]==x)
            gasit=1;
        else if(x>v[mij])
            li=mij+1;
        else
            ls=mij-1;
    }
    mij=(li+ls)/2;
        while(v[mij-1]==x)
            mij--;
    return mij;
}

int st(int x)
{
    li=1;
    ls=n;
    gasit=0;
    while(li<ls && gasit==0)
    {
        mij=(li+ls)/2;
        if(v[mij]==x)
            gasit=1;
        else if(x>v[mij])
            li=mij+1;
        else
            ls=mij-1;
    }
    if(gasit==0)
    return -1;
        while(v[mij+1]==x )
            mij++;
    return mij;
}

int st2(int x)
{
    li=1;
    ls=n;
    while(li<ls)
    {
        mij=(li+ls)/2;
        if(v[mij]>=x)
            ls=mij-1;
            else
            li=mij;
    }
    mij=(li+ls)/2;
        while(v[mij+1]==x )
            mij++;
    return mij;
}

int main()
{
    int i,o,m,x;
    f>>n;
    for(i=1; i<=n; i++)
        f>>v[i];
    f>>m;
    for(i=1; i<=m; i++)
    {
        f>>o>>x;
        if(o==0)
            g<<st(x)<<'\n';
        if(o==1)
            g<<st2(x)<<'\n';
        if(o==2)
            g<<dr(x);
    }
    return 0;
}