Cod sursa(job #2334580)

Utilizator alex.cristi_26patica alex alex.cristi_26 Data 2 februarie 2019 18:28:22
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>

using namespace std;
int v[100005];
int n;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int cerinta0(int val)
{
    int pos=0;
    for(int msk=1<<20; msk>0; msk/=2)
        if(pos+msk<=n && v[pos+msk]<=val)
            pos+=msk;
    if(v[pos]==val)
        return pos;
    else return -1;
}
int cerinta1(int val)
{
    int pos=0;
    for(int msk=1<<20; msk>0; msk/=2)
        if(pos+msk<=n && v[pos+msk]<=val)
            pos+=msk;
        return pos;
}
int cerinta2(int val)
{
    int pos=0;
    for(int msk=1<<20; msk>0; msk/=2)
        if(pos+msk<=n && v[pos+msk]<=val)
            pos+=msk;
    while(v[pos]>=val)
        --pos;
    while(v[pos]<val)
        pos++;
    return pos;
}
int main()
{
    int m,i,j,c,x;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    cin>>m;
    for(j=1;j<=m;j++)
    {
        cin>>c>>x;
    if(c==0)
        cout<<cerinta0(x);
    else if(c==1)
        cout<<cerinta1(x);
    else if(c==2)
        cout<<cerinta2(x);
        cout<<'\n';
    }
    return 0;
}