Cod sursa(job #2114900)

Utilizator lixiLixandru Andrei lixi Data 26 ianuarie 2018 01:20:42
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int a[100001];
int cautare0(int st, int dr, int val)
{
    int mij;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(a[mij] <= val)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    mij = (st + dr) / 2;
    if(a[mij] > val) mij --;
    if(a[mij] == val)
        return mij;
    return -1;
}

int cautare1(int st, int dr, int val)
{
    int mij;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(a[mij] <= val)
            st = mij + 1;
        else
            dr = mij-1 ;
    }
    mij = (st + dr) / 2;
    if(a[mij] > val)
        mij--;
    return mij;
}
int cautare2(int st, int dr, int val)
{
    int mij;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(a[mij] < val)
            st = mij + 1;
        else
            dr = mij-1 ;
    }
    mij = (st + dr) / 2;
    if(a[mij] < val)
        mij++;
    return mij;
}
int main()
{
    int N, M, X, Y;
    f >> N;
    for(int i = 1; i <= N; i++)
        f >> a[i];
    f >> M;
    for(int i = 1; i <= M; i++)
    {
        f >> Y >> X;
        if(Y == 0)
            g << cautare0(1, N , X)<<'\n' ;
            if(Y == 1)
                g << cautare1(1, N , X)<<'\n' ;
        if(Y == 2)
            g << cautare2(1, N , X)<<'\n' ;

    }
    return 0;
}