Cod sursa(job #1679464)

Utilizator segfaultUPB Popa segfault Data 7 aprilie 2016 23:19:49
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#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;
}