Pagini recente » Cod sursa (job #578902) | Cod sursa (job #2125701) | Cod sursa (job #2552722) | Cod sursa (job #1717338) | Cod sursa (job #2627453)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 1e5;
const int M = 1e5;
int v[N+1];
ifstream fin ( "cautbin.in" );
ofstream fout ( "cautbin.out" );
int cb_poz_max_x ( int x, int n ) {
int st, dr, poz = -1;
st = 1, dr = n;
while ( st <= dr ) {
int mij = st + ( dr - st ) / 2;
if ( v[mij] > x )
dr = mij - 1;
else if ( v[mij] == x ) {
poz = mij;
st = mij + 1;
}
else
st = mij + 1;
}
return poz;
}
int cb_poz_max_less_equal_x ( int x, int n ) {
int st, dr, poz;
st = 1, dr = n;
while ( st <= dr ) {
int mij = st + ( dr - st ) / 2;
if ( v[mij] > x )
dr = mij - 1;
else {
poz = mij;
st = mij + 1;
}
}
return poz;
}
int cb_poz_min_bigger_equal_x ( int x, int n ) {
int st, dr, poz;
st = 1, dr = n;
while ( st <= dr ) {
int mij = st + ( dr - st ) / 2;
if ( v[mij] < x )
st = mij + 1;
else {
poz = mij;
dr = mij - 1;
}
}
return poz;
}
int main()
{
int n, m;
int tip, x;
fin >> n;
for ( int i = 1; i <= n; i ++ )
fin >> v[i];
fin >> m;
for ( int i = 1; i <= m; i ++ ) {
fin >> tip >> x;
if ( tip == 0 )
fout << cb_poz_max_x ( x, n );
else if ( tip == 1 )
fout << cb_poz_max_less_equal_x ( x, n );
else if ( tip == 2 )
fout << cb_poz_min_bigger_equal_x ( x, n );
fout << '\n';
}
return 0;
}