Cod sursa(job #2175048)

Utilizator Victor24Vasiesiu Victor Victor24 Data 16 martie 2018 14:56:04
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
#include <bits/stdc++.h>
#define MOD 1999999973
using namespace std;

int n, cc, v[100005], a, b, tip, rsp, m, x;

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

void cautare_0( int val )
{
    int ls = 1;
    int ld = n;
    int mij;
    rsp = 0;

    while ( ls <= ld )
    {
        mij = (ls + ld) / 2;

        if ( v[mij] <= val )
        {
            rsp = mij;
            ls = mij + 1;
        }
        else
        {
            ld = mij - 1;
        }

    }

    if ( v[rsp] == val )
    {
        g<<rsp<<'\n';
    }
    else
    {
        g<<-1<<'\n';
    }

}
void cautare_1(int val)
{

    int ls = 1;
    int ld = n;
    int mij;
    rsp = 1;

    while ( ls <= ld )
    {
        mij = (ls + ld) / 2;

        if ( v[mij] <= val )
        {
            rsp = mij;
            ls = mij + 1;
        }
        else
        {
            ld = mij - 1;
        }

    }

    g<<rsp<<'\n';
}

void cautare_2(int val)
{
    int ls = 1;
    int ld = n;
    int mij;
    rsp = 1;

    while ( ls <= ld )
    {
        mij = (ls + ld) / 2;

        if ( v[mij] >= val )
        {
            rsp = mij;
            ld = mij - 1;
        }
        else
        {
            ls = mij + 1;
        }

    }

    g<<rsp<<'\n';
}

int main ()
{
    f>>n;

    for ( int i = 1 ; i <= n; i++ )
    {
        f>>v[i];
    }

    f>>m;

    for ( int i = 1; i <= m; i++ )
    {
        f>>tip>>x;

        if ( tip == 0 )
        {
            cautare_0(x);
        }
        else if ( tip == 1 )
        {
           cautare_1(x);
        }
        else
        {
            cautare_2(x);
        }

    }

}