Cod sursa(job #1720135)

Utilizator Vbs96Vitelaru Sebastian Vbs96 Data 21 iunie 2016 16:19:51
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 3.47 kb
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
using namespace std;
FILE *in = fopen("cautbin.in", "r");
int v[100001], n, m;

int cb0(int inf, int sup, int key)
{
	int m;
	while (inf <= sup){
		m = inf + (sup - inf) / 2;
		if (v[m] == key) break;
		else if (v[m] < key)
			inf = m + 1;
		else if (v[m] > key)
			sup = m - 1;
	}
	
	if (inf > sup) return -1;
	else{
		while (key == v[m])
			m++;
		return m-1;
	}

}
int cb1(int inf, int sup, int key)
{

	int m;
	while (inf < sup){

		m = inf + (sup - inf) / 2;
		if (v[m] <=key)
			inf = m + 1;
		else
			sup = m;
	}

	while (v[m] > key)
		m--;
	return m;
}
int cb2(int inf, int sup, int key)
{
	int m;
	while (inf < sup){
		m = inf + (sup - inf) / 2;
		if (v[m] < key)
			inf = m + 1;
		else
			sup = m;
	}
	while (v[m] < key)
		m++;
	return m;
}
int main()
{
	int i,val,tip;
	fscanf(in, "%d", &n);
	for (i = 1; i <= n; i++)
		fscanf(in, "%d", v + i);
	fscanf(in, "%d", &m);
	for (i = 0; i < m; i++){
		fscanf(in, "%d %d", &tip, &val);
		if (tip == 0) printf("%d\n", cb0(1, n, val));
		else if (tip == 1) printf("%d\n", cb1(1, n, val));
		else if (tip == 2) printf("%d\n", cb2(1, n, val));
	}

	return 0;
}
/*const int modulo = 666013;
int m[2][2] = { { 0, 1 }, { 1, 1 } }, sol[2][2] = { { 1, 0 }, { 0, 1 } },aux[2][2],n;
FILE *f = fopen("kfib.in", "r");
void inmultire(int m1[2][2], int m2[2][2], int m3[2][2])
{
	for (int i = 0; i < 2; i++)
		for (int j = 0; j < 2; j++)
			for (int k = 0; k < 2; k++)
				m3[i][j] = (m3[i][j] + 1ll*m1[i][k] * m2[k][j]) % modulo;

}
void rid_put_log(int put)
{
	int i;
	for (i = 0; (1 << i) <= put; i++){
		if (put & (1 << i)){
			memset(aux, 0, sizeof(aux));
			inmultire(sol, m, aux);
			memcpy(sol, aux, sizeof(aux));
		}
		memset(aux, 0, sizeof(aux));
		inmultire(m, m, aux);
		memcpy(m, aux, sizeof(aux));
	}
}
int main()
{
	fscanf(f, "%d", &n);
	rid_put_log(n-1);
	printf("%d ",sol[1][1]);
	return 0;
}
*/
/*FILE *f = fopen("spectacole.in", "r");
int n, t;
struct spectacol{
	int x, y, durata;
};
spectacol v[101];
void qsortare(int inf, int sup)
{
	int i, j, x;
	spectacol t;
	i = inf;
	j = sup;
	x = v[(i + j) / 2].y;
	do{

		while (i < sup && v[i].y < x) i++;
		while (j > inf && v[j].y>x) j--;
		if (i <= j){
			t = v[i];
			v[i] = v[j];
			v[j] = t;
			i++;
			j--;
		}
	} while (i <= j);
	if (i < sup) qsortare(i, sup);
	if (j > inf) qsortare(inf, j);
}
int main()
{
	int i, j,k;
	fscanf(f, "%d", &n);
	for (k = 0; k < n; k++){
		fscanf(f, "%d %d", &i, &j);
		v[k].x = i;
		v[k].y = j;
		v[k].durata = j - i;
	}

	qsortare(0, n);
	j = 1;
	int nr = 1;
	for (i = 2; i <= n; i++){
		if (v[i].x >= v[j].y){
			nr++;
			j = i;
		}
	}
	f = fopen("spectacole.out", "w");
	fprintf(f,"%d", nr);
	return 0;
}*/
/*FILE *f = fopen("bete2.in", "r"), *g = fopen("bete2.out", "w");
int v[3001], n;
int cb(int nr)
{
	int inf = 0, sup = n - 1;
	while (inf <= sup){

		int m = (inf + sup) / 2;
		if (v[m] == nr) return m;
		else if (nr < v[m]) sup = m - 1;
		else inf = m + 1;
	}

	return -1;
}
int main()
{
	int nr = 0;
	fscanf(f, "%d", &n);
	for (int i = 0; i < n; i++)
		fscanf(f, "%d", v + i);

	sort(v, v + n);

	for (int i = 0; i < n; i++)
		for (int j = i + 1; j < n; j++)
		{
			int s = v[i] + v[j];
			int ok = cb(s);
			if (ok != -1) nr++;

		}

	fprintf(g,"%d", nr);
	fclose(g);

	return 0;
}*/