Cod sursa(job #1117801)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 23 februarie 2014 20:14:28
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int N, M, a[100002], tip, val;

int bs0(int val)
{
    int st=1, dr=N, mij;
    while (st<=dr)
    {
        mij=(st+dr)>>1;
        if (a[mij]<=val) st=mij+1;
            else dr=mij-1;
    }
    mij=(st+dr)>>1;
    if (a[mij]>val) --mij;
    if (a[mij]!=val) return -1;
        else return mij;
}

int bs1(int val)
{
    int st=1, dr=N, mij;
    while (st<=dr)
    {
        mij=(st+dr)>>1;
        if (a[mij]<=val) st=mij+1;
            else dr=mij-1;
    }
    mij=(st+dr)>>1;
    if (a[mij]>val) --mij;
    return mij;
}

int bs2(int val)
{
    int st=1, dr=N, mij;
    while (st<=dr)
    {
        mij=(st+dr)>>1;
        if (a[mij]>=val) dr=mij-1;
            else st=mij+1;
    }
    mij=(st+dr)>>1;
    if (a[mij]<val) ++mij;
    return mij;
}

int main()
{
    f>>N;
    for (int i=1; i<=N; ++i)
        f>>a[i];
    f>>M;
    for (int i=1; i<=M; ++i)
    {
        f>>tip>>val;
        if (!tip) g<<bs0(val)<<'\n';
            else if (tip==1) g<<bs1(val)<<'\n';
                else if (tip==2) g<<bs2(val)<<'\n';
    }
    return 0;

}