Pagini recente » Cod sursa (job #425897) | Cod sursa (job #479620) | Cod sursa (job #2136749) | Cod sursa (job #2179318) | Cod sursa (job #2368306)
#include <cstdio>
#include <vector>
int N, Q, type, x;
std::vector<int> n;
int exactly(int target) {
int start = 0, end = N - 1;
while (start < end) {
int middle = start + (end - start) / 2 + 1;
if (n[middle] <= target) {
start = middle;
} else {
end = middle - 1;
}
}
return end;
}
int upper(int target) {
int start = 0, end = N - 1;
while (start < end) {
int middle = start + (end - start) / 2;
if (n[middle] < target) {
start = middle + 1;
} else {
end = middle;
}
}
return start;
}
int main() {
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &N);
for (int it = 0; it < N; ++it) {
scanf("%d", &x);
n.push_back(x);
}
scanf("%d", &Q);
while (Q--) {
scanf("%d%d", &type, &x);
switch (type) {
case 0: {
int position = exactly(x);
printf("%d\n", n[position] == x ? 1 + position: -1);
break;
}
case 1: {
printf("%d\n", 1 + exactly(x));
break;
}
case 2: {
printf("%d\n", 1 + upper(x));
break;
}
}
}
return 0;
}