Cod sursa(job #2266348)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 22 octombrie 2018 16:34:17
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("cautbin.in") ;
ofstream g ("cautbin.out") ;
int n , a[100010] , x , st , dr , mij  , m  , tip , poz = -1;
void solve1()
{
    st = 1 ;
    dr = n ;
    while (st <= dr)
    {
    mij = st + (dr -st)/ 2;
    if (a[mij] == x)
    {
    poz = mij;
    }
    if (a[mij] <= x)
    {
    st = mij + 1;
    }
    if (a[mij] > x)
    {
    dr = mij - 1;
    }

    }
    g <<  poz << '\n' ;

}

void solve2()
{
    st = 1 ;
    dr = n;
    while (st <= dr)
    {
    mij = st + (dr -st)/ 2;
    if (a[mij] >= x)
    {
    poz = mij ;
    st = mij + 1 ;
    }
    else if (a[mij] < x)
    {
        dr = mij - 1 ;
    }

    }
    while (a[poz] > x)
    poz -- ;
    g  << poz << '\n' ;

}
void solve3()
{
st = 1;
dr = n ;
while (st <= dr)
{
   mij = st + (dr -st)/ 2;
    if (a[mij] <= x)
    {
        poz = mij;
        dr = mij - 1 ;
    }
    else if (a[mij] > x)
    {
    st = mij + 1 ;

    }
}
while (a[poz] < x)
poz ++ ;
g <<  poz << '\n' ;
}

int main()
{
f >> n;
for (int i = 1 ; i <= n ; ++i)
f >> a[i] ;
f >> m ;
for (int k = 1 ; k <= m ; ++k)
{
    f >> tip >> x ;
    if(tip == 0)
    solve1() ;
    if(tip == 1)
    solve2() ;
    if(tip == 2)
    solve3() ;
}
return 0 ;

}