Nu aveti permisiuni pentru a descarca fisierul grader_test14.in
Cod sursa(job #1446087)
Utilizator | Data | 31 mai 2015 20:34:59 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.15 kb |
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <vector>
using namespace std;
#define _submit
#ifdef _submit
#define InFile "cautbin.in"
#define OutFile "cautbin.out"
#else
#define InFile "fis.in"
#define OutFile "fis.out"
#endif
vector<int> v;
int main() {
assert(freopen(InFile, "r", stdin));
assert(freopen(OutFile, "w", stdout));
int N;
scanf("%d", &N);
v.resize(N);
for (int i = 0; i < N; ++i)
scanf("%d", &v[i]);
int M;
scanf("%d", &M);
vector<int>::iterator aux;
for (int i = 0; i < M; i++) {
int op, x;
scanf("%d%d", &op, &x);
switch (op) {
case 0:
aux = upper_bound(v.begin(), v.end(), x);
if (aux == v.begin())
printf("-1\n");
else {
aux--;
if (*aux == x)
printf("%d\n", distance(v.begin(), aux) + 1);
else
printf("-1\n");
}
break;
case 1:
aux = upper_bound(v.begin(), v.end(), x);
aux--;
printf("%d\n", distance(v.begin(), aux) + 1);
break;
case 2:
aux = lower_bound(v.begin(), v.end(), x);
printf("%d\n", distance(v.begin(), aux) + 1);
break;
default:
assert(1 == 0);
break;
}
}
return 0;
}