Cod sursa(job #2075752)

Utilizator RaduIonescuRadu Ionescu RaduIonescu Data 25 noiembrie 2017 17:26:54
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int N,i,M,j,Q,v[100001],f,I,st,dr,mij;
short Z;

int zero (int p)
{
    st=0; dr=N-1;
    while (st!=dr)
   {
        mij=(st+dr)/2;
        if ( p<=v[mij] )
            dr=mij;
        else if ( p>v[mij] )
            st=mij+1;
   }

   while ( st!=N-1 && v[st]==v[st+1] ) ++st;

   if ( v[st]==p ) return st+1;
   if ( v[st]!=p ) return -1;
}

int unu (int p)
{
    st=0; dr=N-1;
    while (st!=dr)
    {
        mij=(st+dr)/2;
        if (p<=v[mij])
            dr=mij;
        else if (p>v[mij])
            st=mij+1;
    }

    while (st!=N-1 && v[st]==v[st+1] && p==v[st]) st++;

    if (v[st]==p) return st+1;
    if (p<v[st] && p>v[st-1]) return st;

}

int doi (int p)
{
    st=0; dr=N-1;
    while (st!=dr)
    {
        mij=(st+dr)/2;
        if (p<=v[mij])
            dr=mij;
        else if (p>v[mij])
            st=mij+1;
    }
    return st+1;

}

int main()
{
    in>>N;
    for (i=0;i<N;i++) in>>v[i];

    in>>M;

    for (j=1;j<=M;j++)
    {
        in>>Z>>Q;
        if (Z==0)
        {
            out<<zero(Q);
            if (j!=M) out<<"\n";
        }
        if (Z==1)
        {
            out<<unu(Q);
            if (j!=M) out<<"\n";
        }
        if (Z==2)
        {
            out<<doi(Q);
            if (j!=M) out<<"\n";
        }

    }

    return 0;
}