Cod sursa(job #2114898)

Utilizator lixiLixandru Andrei lixi Data 26 ianuarie 2018 01:09:27
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 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 ;
    }
    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 ;
    }
    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) << ' ';
        else
            if(Y == 1)
                g << cautare1(1, N , X) << ' ';
        if(Y == 2)
            g << cautare2(1, N , X) << ' ';
    }
    return 0;
}