Cod sursa(job #1120765)

Utilizator horiainfoTurcuman Horia horiainfo Data 25 februarie 2014 09:59:33
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
long i,n,m,v[100001],a,b,inc,sf,mj,ok;
void func0(int a)
{
    inc=1; sf=n; ok=0;
    while(inc<=sf)
    {
        mj=(inc+sf)/2;
        if(v[mj]==a) {ok=1; break;}
        if(v[mj]>a) sf=mj-1;
        if(v[mj]<a) inc=mj+1;
    }
    if(ok==0) fout<<"-1"<<'\n';
    else
    {
        int i=mj+1;
        while(v[i]==a && i<=n) i++;
        fout<<i-1<<'\n';
    }
}
void func1(int a)
{
    inc=1; sf=n; ok=0;
    while(inc<=sf)
    {
        mj=(inc+sf)/2;
        if(v[mj]==a) {ok=1; break;}
        if(v[mj]>a) sf=mj-1;
        if(v[mj]<a) inc=mj+1;
    }
    a=v[sf]; int i=sf+1;
    if(ok==1) a=v[mj],i=mj+1;
    while(v[i]==a && i<=n) i++;
    fout<<i-1<<'\n';
}
void func2(int a)
{
    int i=0;
    inc=1; sf=n; ok=0;
    while(inc<=sf)
    {
        mj=(inc+sf)/2;
        if(v[mj]==a) {ok=1; break;}
        if(v[mj]>a) sf=mj-1;
        if(v[mj]<a) inc=mj+1;
    }
    a=v[inc]; i=inc-1;
    if(ok==1) a=v[mj],i=mj-1;
    while(v[i]==a && i>=1) i--;
    fout<<i+1<<'\n';
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)   fin>>v[i];
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b;
        if(a==0) func0(b);
        else
            if(a==1) func1(b);
            else func2(b);
    }
    return 0;
}