Cod sursa(job #2269964)

Utilizator Cadir_TimurTIMUr Cadir Cadir_Timur Data 26 octombrie 2018 20:39:01
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>

using namespace std;

const int L = 16;
const int N = 100001;

int v[N], n;

int caut0(int x)
{
    int r = 0, pas = 1 << L;
    while (pas > 0)
    {
        if ( r + pas <= n && v[r + pas] <= x)
        {
            r+= pas;
        }
        pas/= 2;
    }
    if (v[r] < x)
    {
        r = -1;
    }
    return r;
}

int caut1(int x)
{
    int r = 0, pas = 1 << L;
    while (pas > 0)
    {
        if ( r + pas <= n && v[r + pas] <= x)
        {
            r+= pas;
        }
        pas/= 2;
    }
    return r;
}

int caut2(int x)
{
    int r = 0, pas = 1 << L;
    while (pas > 0)
    {
        if ( r + pas <= n && v[r + pas] < x)
        {
            r+= pas;
        }
        pas/= 2;
    }
    r++;
    return r;
}

int main()
{
    int m, t, x;
    cin >> n;
    for (int i = 0; i < n; i++){
      cin >> v[i];
    }
    cin >> m;
    for (int i = 0;i < m; i++){
      cin >> t >> x;
      if (t == 0){
        cout << caut0(x) << "\n";
      }
      else if (t == 1){
        cout << caut1(x) << "\n";
      }
      else if (t == 2){
        cout << caut2(x) << "\n";
      }
    }
    return 0;
}