Pagini recente » Cod sursa (job #2223837) | Cod sursa (job #1908275) | Cod sursa (job #823038) | Cod sursa (job #1082245) | Cod sursa (job #2588736)
#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 = (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 = (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;
int lower_b = pozMax(nr);
switch(cerinta) {
case 0: if(sir[lower_b] != nr) cout << -1 << '\n';
else cout << ++lower_b << '\n';
break;
case 1: cout << ++lower_b << '\n'; break;
case 2: cout << pozMin(nr) + 1 << '\n';
}
}
}