Pagini recente » Cod sursa (job #2543257) | Cod sursa (job #54520) | Cod sursa (job #1029982) | Cod sursa (job #2375326) | Cod sursa (job #2266348)
#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 ;
}