Pagini recente » Cod sursa (job #1669441) | Cod sursa (job #191908) | Cod sursa (job #1434225) | Cod sursa (job #2645330) | Cod sursa (job #1679464)
#include <fstream>
#include <stdlib.h>
#include <iostream>
using namespace std;
int binary_s(int val, const long int v[], int n) {
int i, step;
for (step = 1; step <= n; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <= n && v[i + step] <= val)
i += step;
return i;
}
int rev_search(int val, const long int v[], int n) {
int i, step;
for (step = 1; step <= n; step <<= 1);
for (i = n; step; step >>= 1)
if (i - step > 0 && v[i - step] >= val)
i -= step;
return i;
}
int main () {
std::ifstream f ("cautbin.in", std::ifstream::in);
std::ofstream g ("cautbin.out", std::ofstream::out);
int n, m, i;
int mod, val, result;
f >> n;
long int *v = (long int *) malloc (n * sizeof(long int));
for (i = 1; i <= n; i++) {
f >> v[i];
std::cout << v[i] << " ";
}
std::cout << "\n";
f >> m;
for (; m; m--) {
f >> mod >> val;
if(mod < 2) {
result = binary_s(val, v, n);
if(!mod && val != v[result])
g << "-1\n";
else
g << result << "\n";
}
else
g << rev_search(val, v, n) << "\n";
}
f.close();
g.close();
return 0;
}