Cod sursa(job #2266365)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 22 octombrie 2018 16:43:38
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 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)
    {
    st = mij + 1;
    }
    else {dr = mij - 1;}

    }
    if (a[st] > x)
     st -- ;

    if (a[st] == x)
    g <<  st << '\n' ;
    else g << -1 << '\n';

}

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

    }
    if (a[st] > x)
    st -- ;
    g  << st << '\n' ;

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

    }
}
while (a[st] < x)
st ++ ;
g <<  st << '\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 ;

}