Pagini recente » Cod sursa (job #2032844) | Cod sursa (job #255846) | Cod sursa (job #171218) | Cod sursa (job #1714106) | Cod sursa (job #2703539)
#include <stdio.h>
using namespace std;
const int N_MAX = 100000;
int arr[N_MAX];
int n, m;
// returns the first index of a number >= val
int lower_bound(int val) {
int bit = 1;
for (; bit < n; bit <<= 1);
int index = n - 1;
for (; bit; bit >>= 1) {
if (index - bit >= 0 && arr[index - bit] >= val) {
index -= bit;
}
}
if (arr[index] < val) {
index = -1;
}
return index;
}
// returns the last index of a number <= val
int upper_bound(int val) {
int bit = 1;
for (; bit < n; bit <<= 1);
int index = 0;
for (; bit; bit >>= 1) {
if (index + bit < n && arr[index + bit] <= val) {
index += bit;
}
}
if (arr[index] > val) {
index = -1;
}
return index;
}
int main() {
FILE * fin, * fout;
fin = fopen("cautbin.in", "r");
fscanf(fin, "%d", &n);
for (int i = 0; i < n; i++) {
fscanf(fin, "%d", &arr[i]);
}
fout = fopen("cautbin.out", "w");
int op, val, index;
fscanf(fin, "%d", &m);
for (int i = 0; i < m; i++) {
fscanf(fin, "%d%d", &op, &val);
if (op < 2) {
index = upper_bound(val);
if (op == 0 && arr[index] != val) {
index = -1;
}
} else {
index = lower_bound(val);
}
if (index != - 1) {
index++;
}
fprintf(fout, "%d\n", index);
}
fclose(fin);
fclose(fout);
return 0;
}