Pagini recente » Cod sursa (job #2874116) | Cod sursa (job #2865305) | Cod sursa (job #2712357) | Cod sursa (job #2366775) | Cod sursa (job #1675178)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
// Intoarce pozitia pe care se afla x sau pozitia pe care ar trebui inserat,
// daca nu se afla deja in vector.
int bsearch(int v[], int x, int left, int right) {
if (left == right || left + 1 == right) {
if (v[left] > x) return left - 1;
if (v[left] < x) return left + 1;
return left;
}
int m = left + (right - left) / 2;
if (v[m] == x) {
if (v[m + 1] != x) return m;
}
if (v[m] > x) return bsearch(v, x, left, m);
return bsearch(v, x, m, right);
}
int v[100001];
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, x, op, nr_op;
// Citeste vectorul.
f >> n;
for (int i = 0; i < n; i++) {
f >> v[i];
}
// Citeste si executa fiecare test.
f >> nr_op;
for (int i = 0; i < nr_op; i++) {
f >> op >> x;
int result = bsearch(v, x, 0, n - 1);
if (op == 0) {
if (v[result] != x) result = -1;
}
else if (op == 2) {
if (v[result] == x) {
while (v[result] == x) result--;
result++;
}
}
result++;
g << result << endl;
}
f.close();
g.close();
return 0;
}