Cod sursa(job #2022002)

Utilizator VladUdriVlad Udrescu VladUdri Data 15 septembrie 2017 12:00:13
Problema Cautare binara Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 2 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMax = 100001;

int a[NMax], b[NMax];
int n, x, v, m;

int nr0(int n, int a[], int v)
{
    int i, j;
    i = 1; j = n;
    int mijl;

    while(i <= j)
    {
        mijl = (i + j) / 2;

        if(v == a[mijl] && i != n)
        {
            if(v < a[mijl + 1])
                return mijl;
            else if(v == a[mijl + 1])
                i = mijl + 1;
        }
        else if(v == a[mijl] && i == n)
            return mijl;
        else if(v > a[mijl] && i != n)
                i = mijl + 1;
        else if(v < a[mijl] && i != n)
                j = mijl - 1;

    }
    return -1;
}

int nr1(int n, int a[], int v)
{
    int i, j;
    i = 1; j = n;
    int mijl;

    while(i <= j)
    {
        mijl = (i + j) / 2;

        if(v >= a[mijl] && i != n)
        {
            if(v < a[mijl + 1])
                return mijl;
            else if(v >= a[mijl + 1])
                i = mijl + 1;
        }
        else if(v >= a[mijl] && i == n)
            return mijl;

        else if(v < a[mijl] && i != n)
                j = mijl - 1;

    }
}
int nr2(int n, int a[], int v)
{
    int i, j;
    i = 1; j = n;
    int mijl;

    while(i <= j)
    {
        mijl = (i + j) / 2;

        if(v <= a[mijl] && j != 1)
        {
            if(v > a[mijl - 1])
                return mijl;
            else if(v <= a[mijl - 1])
                j = mijl - 1;
        }
        else if(v <= a[mijl] && j == 1)
            return mijl;

        else if(v > a[mijl] && j != 1)
                i = mijl + 1;

    }
}
int main()
{
    f >> n;
    for(int i = 1; i <= n; ++i)
        f >> a[i];
    f >> m;
    for(int i = 1; i <= m; ++i)
    {
        f >> x;
        f >> v;
        if(x == 0) g << nr0(n, a, v) << '\n';
        if(x == 1) g << nr1(n, a, v) << '\n';
        if(x == 2) g << nr2(n, a, v) << '\n';
    }
}