Mai intai trebuie sa te autentifici.
Cod sursa(job #1022264)
Utilizator | Data | 5 noiembrie 2013 00:10:11 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.91 kb |
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int n, m, x, op;
vector<int> v;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &x);
v.push_back(x);
}
scanf("%d", &m);
vector<int>::iterator it;
for (int i = 0; i < m; i++) {
scanf("%d %d", &op, &x);
switch (op) {
case 0:
it = upper_bound(v.begin(), v.end(), x);
if (it == v.end() && *(it - 1) == x)
printf("%d\n", it - v.begin());
else if (it == v.end() || *(it - 1) != x)
printf("-1\n");
else
printf("%d\n", it - v.begin());
break;
case 1:
it = upper_bound(v.begin(), v.end(), x);
printf("%d\n", it - v.begin());
break;
case 2:
it = lower_bound(v.begin(), v.end(), x);
printf("%d\n", it - v.begin() + 1);
break;
}
}
return 0;
}