Cod sursa(job #2354210)

Utilizator stratonedanielDaniel Stratone stratonedaniel Data 25 februarie 2019 00:35:06
Problema Cautare binara Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 2.57 kb
#include <stdio.h>
#include <stdlib.h>

int custom_binary_search(int array[],int left,int right,int max_index,int number,int mode)
{
	if(left<=right)
	{
		int middle=left + (right-left)/2;
////////////////////////////////////////////////		
		if(mode==0 && array[middle]==number && array[middle+1]>number)
			return middle;

		if(mode==0 && middle==max_index && array[middle]==number)
			return middle;

		if(mode==0 && array[middle]==number && array[middle+1]==number)
			return custom_binary_search(array,middle+1,right,max_index,number,mode);

		if(mode==0 && array[middle]<number)
			return custom_binary_search(array,middle+1,right,max_index,number,mode);

		if(mode==0 && array[middle]>number)
			return custom_binary_search(array,left,middle-1,max_index,number,mode);

///////////////////////////////////////////////////////////////////////////////	
		if(mode==1 && array[middle]<=number && middle==max_index)
			return middle; 		

		if(mode==1 && array[middle]<=number && array[middle+1]>number)
			return middle;
		
		if(mode==1 && array[middle]==number && array[middle+1]==number)
			return custom_binary_search(array,middle+1,right,max_index,number,mode);

	
		if(mode==1 && array[middle]<number)
			return custom_binary_search(array,middle+1,right,max_index,number,mode);

		if(mode==1 && array[middle]>number)
			return custom_binary_search(array,left,middle-1,max_index,number,mode);
////////////////////////////////////////////////////////////////////////////////

		if(mode==2 && array[middle]>=number && middle==0)
			return middle; 		

		if(mode==2 && array[middle]>=number && array[middle-1]<number)
			return middle;
		
		if(mode==2 && array[middle]==number && array[middle-1]==number)
			return custom_binary_search(array,left,middle-1,max_index,number,mode);

	
		if(mode==2 && array[middle]<number)
			return custom_binary_search(array,middle+1,right,max_index,number,mode);

		if(mode==2 && array[middle]>number)
			return custom_binary_search(array,left,middle-1,max_index,number,mode);

	}

	return -1;
}

int main()
{
	FILE *read=fopen("cautbin.in","r");
	FILE *write=fopen("cautbin.out","w");

	int length_of_array;
	int number_of_questions;

	int array[100001];

	fscanf(read,"%d",&length_of_array);

	for(int i=0;i<length_of_array;i++)
		fscanf(read,"%d",&array[i]);

	fscanf(read,"%d",&number_of_questions);

	int x,y;

	for(int i=0;i<number_of_questions;i++)
	{
		fscanf(read,"%d %d",&x,&y);

			int res=custom_binary_search(array,0,length_of_array-1,length_of_array-1,y,x);
			if(res==-1)
				printf("-1\n");
			else
				printf("%d\n",res+1);
 
	
	}
	
	


	fclose(read);
	fclose(write);
	
	return 0;
}