Pagini recente » Cod sursa (job #1285458) | Cod sursa (job #369325) | Cod sursa (job #28656) | Cod sursa (job #2452671) | Cod sursa (job #764484)
Cod sursa(job #764484)
#include <stdio.h>
using namespace std;
int n, v[100010];
int m, type, value;
int rez;
void citeste() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &v[i]);
}
}
void afiseaza_valoare() {
printf("%d\n", rez);
}
int max(int a, int b) {
if (a == -1) {
return b;
} else if (b == -1) {
return a;
}
return (a > b ? a : b);
}
int min(int a, int b) {
if (a == -1) {
return b;
} else if (b == -1) {
return a;
}
return (a < b ? a : b);
}
int bSearchLess(int pi, int pf) {
if (pi > pf) {
return -1;
}
int pa = (pi + pf) / 2;
if (v[pa] > value) {
return bSearchLess(pi, pa - 1);
} else {
return max(pa, bSearchLess(pa + 1, pf));
}
}
int bSearchMore(int pi, int pf) {
if (pi > pf) {
return -1;
}
int pa = (pi + pf) / 2;
if (v[pa] < value) {
return bSearchMore(pa + 1, pf);
} else {
return min(pa, bSearchMore(pi , pa - 1));
}
}
int bSearchEqual(int pi, int pf) {
if (pi > pf) {
return -1;
}
int pa = (pi + pf)/2;
if (v[pa] < value) {
return bSearchEqual(pa + 1, pf);
} else if (v[pa] > value) {
return bSearchEqual(pi, pa - 1);
} else {
return max(pa, bSearchEqual(pa + 1, pf));
}
}
void rezolva() {
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d%d", &type, &value);
switch (type) {
case 0:
rez = bSearchEqual(1, n);
break;
case 1:
rez = bSearchLess(1, n);
break;
case 2:
rez = bSearchMore(1, n);
break;
default:
break;
}
afiseaza_valoare();
}
}
int main(){
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
citeste();
rezolva();
return 0;
}