Cod sursa(job #2062405)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 10 noiembrie 2017 12:30:07
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100050],n, m;
void citire ()
{
  int i;
  f>>n;
  for(i=1;i<=n; i++)    f>>v[i];
}
int cautb0 (int x)
{
    int mid, li=1, ls=n;
    while (li<= ls)
    {
        mid = (li+ ls) / 2;
        if (v[mid] <= x)
            li= mid + 1;
        else
            ls = mid - 1;
    }
    mid = (li+ ls) / 2;

    if (v[mid] > x) mid --;
    if (v[mid] == x)
        return mid;
    return -1;
}

int cautb1 (int x)
{   int li=1, ls=n;
    int mid;
    while (li< ls)
    {
        mid = (li+ ls) / 2;
        if (v[mid] <= x)
            li= mid + 1;
        else
            ls = mid;
    }

    mid = (li+ ls) / 2;
    if (v[mid] > x)
       -- mid;
    return mid;
}

int cautb2 ( int x)
{
    int mid, li=1, ls=n;
    while (li< ls)
    {
        mid = (li+ ls) / 2;
        if (v[mid] < x)
            li= mid + 1;
        else
            ls = mid;
    }

    mid = (li+ ls) / 2;
    if (v[mid] < x)
       ++ mid;
    return mid;
}

int main ()
{   citire();
    int x, op;
    f>>m;
    while (m --)
        {
          f>>op>>x;
          if (op== 0)
             g<<cautb0(x)<<endl;
          if (op == 1)
             g<<cautb1(x)<<endl;
          if (op == 2)
             g<<cautb2(x)<<endl;
    }
}