Pagini recente » Cod sursa (job #2344045) | Cod sursa (job #1477499) | Cod sursa (job #2927480) | Cod sursa (job #2654469) | Cod sursa (job #1675159)
#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(vector<int> v, int x, int left, int right) {
if (left == right) {
if (v[left] > x) return left - 1;
if (v[left] < x) return left + 1;
return left;
}
int m = (left + right) / 2;
if (v[m] == x) {
while (v[m] == x) m++;
return m - 1;
}
if (v[m] > x) return bsearch(v, x, left, m);
return bsearch(v, x, m, right);
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, x, op, nr_op;
// Citeste vectorul.
vector<int> v;
f >> n;
for (int i = 0; i < n; i++) {
f >> x;
v.push_back(x);
}
// 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, v.size() - 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;
}