Cod sursa(job #2478007)

Utilizator gabimoiseMoise Gabriel gabimoise Data 21 octombrie 2019 14:55:51
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>

using namespace std;

long task_0 (long x, long a[], long n)
{
    long l = 0, r = n;
    // a[0..l) <= x < a[r..n) && l < r
    while (l < r)
    {
        long m = (l+r)/2;
        if (x >= a[m]) l = m+1;
        else r = m;
    }
    // l == r => a[0..l) <= x < a[l..n), so we return (l-1)+1 if a[l-1] = x and (-1) otherwise
    if (a[l-1] == x) return l;
    else return (-1);
}

long task_2(long x, long a[], long n)
{
    long l = 0, r = n;
    // a[0..l) < x <= a[r..n) && l < r
    while (l < r)
    {
        long m = (l+r)/2;
        if (x > a[m]) l = m+1;
        else r = m;
    }
    // l == r => a[0..l) < x <= a[l..n), so we return (l-1)+1 if a[l-1] = x and (-1) otherwise
    return (l+1);
}

int main()
{
    long N,M,i,q,elems[100010],x,task;
    ifstream in ("cautbin.in");
    ofstream out ("cautbin.out");
    in >> N ;
    for (i = 0 ; i < N; i++) in >> elems[i];
    in >> M ;
    for (q = 0 ; q < M ; q ++)
    {
        in >> task >> x;
        if ((task == 0) || (task == 1)) out << task_0(x,elems,N) << endl;
        else out << task_2(x,elems,N) << endl;

    }
    return 0;
}