Pagini recente » Cod sursa (job #2665797) | Istoria paginii runda/urmasiiluidoru/clasament | Istoria paginii runda/oji2017/clasament | Cod sursa (job #1848904) | Cod sursa (job #1691261)
#include <cstdio>
using namespace std;
int v[100005];
int INTREBARE_0( int x, int n)
{
int a = 1, b = n, rasp = -1;
while(a <= b)
{
int m = (a + b) / 2;
if( v[m] > x )
b = m - 1;
else if( v[m] < x )
a = m + 1;
else if( v[m] == x )
{
rasp = m;
a = m + 1;
}
}
return rasp;
}
int INTREBARE_1( int x, int n )
{
int pow = 1 << 16, rez = 1;
while(pow > 0)
{
if(pow + rez <= n && v[pow + rez] <= x)
rez += pow;
pow >>= 1;
}
return rez;
}
int INTREBARE_2( int x, int n )
{
int pow = 1 << 16, rez = 0;
while(pow > 0)
{
if( pow + rez <= n && v[pow + rez] < x )
rez += pow;
pow >>= 1;
}
return rez + 1;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int n, m, r;
scanf("%d", &n);
for( int i = 1; i <= n; i++ )
scanf("%d", &v[i]);
scanf("%d", &m);
for( int i = 1; i <= m; i++ )
{
int a, b;
scanf("%d%d", &a, &b);
if( a == 0 )
{
r = INTREBARE_0( b, n );
printf("%d\n", r);
}else if( a == 1 )
{
r = INTREBARE_1( b, n );
printf("%d\n", r);
}else{
r = INTREBARE_2( b, n );
printf("%d\n", r);
}
}
return 0;
}