Pagini recente » Cod sursa (job #1044402) | Cod sursa (job #3281293) | Cod sursa (job #1736924) | Cod sursa (job #1560240) | Cod sursa (job #1559106)
#include <cstdio>
#include <vector>
using namespace std;
int SIZE, Q;
int MaxPos(const vector<int> &V, int n) {
int maxPos = -1;
int start = 0;
int end = SIZE;
while(start < end) {
int middle = (start+end)/2;
if(V[middle] <= n) {
start = middle+1;
if(V[middle] == n) {
maxPos = middle;
}
} else {
end = middle;
}
}
if(maxPos < 0) {
return maxPos;
}
return maxPos+1;
}
int LessThan(const vector<int> &V, int n) {
int start = 0;
int end = SIZE;
int result = 0;
while(start < end) {
int middle = (start+end)/2;
if(V[middle] <= n) {
result = middle;
start = middle+1;
} else {
end = middle;
}
}
if(start < SIZE && V[start] <= n) {
result = start;
}
return result+1;
}
int BiggerThan(const vector<int> &V, int n) {
int start = 0;
int end = SIZE;
int result = SIZE-1;
while(start < end) {
int middle = (start+end)/2;
if(V[middle] >= n) {
end = middle;
result = middle;
} else {
start = middle+1;
}
}
if(start < SIZE && V[start] >= n) {
result = start;
}
return result+1;
}
int main() {
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &SIZE);
vector<int> V(SIZE);
for(int i = 0; i < SIZE; i++){
scanf("%d", &V[i]);
}
scanf("%d", &Q);
int q, n;
for(int i = 0; i < Q; i++) {
scanf("%d %d", &q, &n);
if(q == 0) {
printf("%d\n", MaxPos(V, n));
} else if(q == 1) {
printf("%d\n", LessThan(V, n));
} else if(q == 2) {
printf("%d\n", BiggerThan(V, n));
}
}
return 0;
}