Pagini recente » Cod sursa (job #2987136) | Cod sursa (job #2374767) | Cod sursa (job #641954) | Cod sursa (job #1866586) | Cod sursa (job #2588743)
#include <bits/stdc++.h>
using namespace std;
int sir[100005], n;
int pozMin(int x)
{
int left = -1, right = n - 1, mid;
while(right - left > 1)
{
mid = left + (right - left) / 2;
if(sir[mid] >= x) right = mid;
else left = mid;
}
return right;
}
int pozMax(int x)
{
int left = 0, right = n, mid;
while(right - left > 1)
{
mid = left + (right - left) / 2;
if(sir[mid] > x) right = mid;
else left = mid;
}
return left;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> sir[i];
}
int op, cerinta, nr;
cin >> op;
for(int i = 0; i < op; i++)
{
cin >> cerinta >> nr;
switch(cerinta) {
case 0:{int lower_b = pozMax(nr);
if(sir[lower_b] != nr) cout << -1 << '\n';
else cout << ++lower_b << '\n';
break;}
case 1: cout << pozMax(nr) + 1 << '\n'; break;
case 2: cout << pozMin(nr) + 1 << '\n';
}
}
}