Cod sursa(job #2627054)

Utilizator lucidanescu28Danescu Lucian lucidanescu28 Data 9 iunie 2020 14:57:44
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <stdio.h>

int binSearch0(int a[], int n, int x){
	int lt = 0, rt = n - 1, poz = -2;

	while(lt <= rt){
		int mid = lt + (rt - lt) / 2;
		
		if(a[mid] > x) rt = mid - 1;
		if(a[mid] < x) lt = mid + 1;
		if(a[mid] == x){
			poz = mid;
			lt = mid + 1;
		}
	}

	return poz;
}

int binSearch1(int a[], int n, int x){
	int lt = 0, rt = n - 1, poz = -1;

	while(lt <= rt){
		int mid = lt + (rt - lt) / 2;
		
		if(a[mid] > x) rt = mid - 1;
		if(a[mid] <= x){
			poz = mid;
			lt = mid + 1;
		}
	}

	return poz;
}

int binSearch2(int a[], int n, int x){
	int lt = 0, rt = n - 1, poz = -1;

	while(lt <= rt){
		int mid = lt + (rt - lt) / 2;
		
		if(a[mid] >= x) {
			rt = mid - 1;
			poz = mid;
		}
		if(a[mid] < x) lt = mid + 1;
	}

	return poz;
}

int main(){
	FILE *fin = fopen("cautbin.in", "r");
	FILE *fout = fopen("cautbin.out", "w");
	int N, M, a[100000], operation, x;

	fscanf(fin, "%d", &N);
	for(int i = 0; i < N; i++)
		fscanf(fin, "%d", &a[i]);

	fscanf(fin, "%d", &M);
	for(int i = 1; i <=M; i++){
		fscanf(fin, "%d%d", &operation, &x);
		if(operation == 0) fprintf(fout, "%d\n", binSearch0(a, N, x) + 1);
		if(operation == 1) fprintf(fout, "%d\n", binSearch1(a, N, x) + 1);
		if(operation == 2) fprintf(fout, "%d\n", binSearch2(a, N, x) + 1);
		// switch(operation){
		// 	case 0:
		// 		fprintf(fout, "%d\n", binSearch0(a, N, x));
		// 	case 1:
		// 		fprintf(fout, "%d\n", binSearch1(a, N, x));
		// 	case 2:
		// 		fprintf(fout, "%d\n", binSearch2(a, N, x));
		// 	default:
		// 		break;

		// }
	}
	// printf("%d\n", binSearch2(a, N, 3));

	fclose(fin);
	fclose(fout);
}