Pagini recente » infoarena - comunitate informatica, concursuri de programare | infoarena - comunitate informatica, concursuri de programare | infoarena - te ajutam sa devii olimpic! | Cod sursa (job #1282049) | Cod sursa (job #2269963)
#include <iostream>
using namespace std;
const int L = 16;
const int N = 100001;
int v[N];
int caut0(int x)
{
int r = 0, pas = 1 << L;
while (pas > 0)
{
if ( r + pas <= n && v[r + pas] <= x)
{
r+= pas;
}
pas/= 2;
}
if (v[r] < x)
{
r = -1;
}
return r;
}
int caut1(int x)
{
int r = 0, pas = 1 << L;
while (pas > 0)
{
if ( r + pas <= n && v[r + pas] <= x)
{
r+= pas;
}
pas/= 2;
}
return r;
}
int caut2(int x)
{
int r = 0, pas = 1 << L;
while (pas > 0)
{
if ( r + pas <= n && v[r + pas] < x)
{
r+= pas;
}
pas/= 2;
}
r++;
return r;
}
int main()
{
int n, m, t, x;
cin >> n;
for (int i = 0; i < n; i++){
cin >> v[i];
}
cin >> m;
for (int i = 0;i < m; i++){
cin >> t >> x;
if (t == 0){
cout << caut0(x) << "\n";
}
else if (t == 1){
cout << caut1(x) << "\n";
}
else if (t == 2){
cout << caut2(x) << "\n";
}
}
return 0;
}