Cod sursa(job #2277691)

Utilizator OveehMariciuc Ovidiu Oveeh Data 6 noiembrie 2018 18:50:33
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#define nmax 100001

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n,v[nmax],m;

void Cautare1(int x)
{
    int mij,s,d,poz=-1;
    s=1;d=n;
    while(s<=d)
    {
        mij=(s+d)/2;
        if(x==v[mij])
            {poz=mij;break;}
        else
            if(x<v[mij])
                d=mij-1;
            else
                s=mij+1;
    }
    if(poz==-1) {fout<<-1;return;}
    else
        while(v[poz+1]==v[poz])
            poz++;
    fout<<poz<<"\n";

}
void Cautare2(int x)
{
    int mij,s,d,poz=-1;
    s=1;d=n;
    while(s<=d)
    {
        mij=(s+d)/2;
        if(v[mij]<=x)
            {poz=mij;s=mij+1;}
        else d=mij-1;

    }
    fout<<poz<<"\n";
}


void Cautare3(int x)
{
    int mij,s,d,poz=-1;
    s=1;d=n;
    while(s<=d)
    {
        mij=(s+d)/2;
        if(v[mij]>=x)
            {poz=mij;d=mij-1;}
        else s=mij+1;

    }
    fout<<poz;
}


void Solutie()
{
    int i,x,val;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(i=1;i<=m;i++)
        {
            fin>>x>>val;
            if(x==0) Cautare1(val);
            if(x==1) Cautare2(val);
            if(x==2) Cautare3(val);
        }
}

int main()
{
    Solutie();
    return 0;
}