Cod sursa(job #1673220)

Utilizator deeagrtAndGrt deeagrt Data 3 aprilie 2016 16:12:08
Problema Cautare binara Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.98 kb
package probleme;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ex {
	
	int cau (int[] v, int l,int h, int val){
		int mid = l + (h-l)/2 ;
	if (l > h)
			return -1;
		if (v[mid] == val){
			if (mid+1 == v.length || v[mid+1] != val)
				return mid+1;
			else return cau(v,mid+1,h,val);
		}
		if (v[mid] < val){
			 int x = cau(v,mid+1,h,val);
			if (x == -1)
				 return mid+1;
			 return x;
		}	 
		else { int x = cau(v,l,mid-1,val);
		 if (x == -1)
			 return mid;
		return x;}
	}
	int cautam(int[] v, int l,int h, int val){
		int mid = l + (h-l)/2 ;
		if (l > h)
				return -1;
			if (v[mid] == val){
				if (mid-1 == 0 || v[mid-1] != val)
					return mid+1;
				else return cautam(v,1,mid-1,val);
			}
			if (v[mid] < val){
				 int x = cautam(v,mid+1,h,val);
				if (x == -1)
					 return mid+1;
				 return x;
			}	 
			else { int x = cautam(v,l,mid-1,val);
			 if (x == -1)
				 return mid;
			return x;}
	}
	int cauta(int[] v, int l,int h, int val){
		int mid = l + (h-l)/2 ;
		if (l > h)
			return -1;
		if (v[mid] == val)
			if (v[mid+1] != val)
				return mid+1;
			else return cauta(v,mid+1,h,val);
		if (v[mid] < val)
			return cauta(v,mid+1,h,val);
		else return cauta(v,l,mid-1,val);
	
	}
public static void main(String[] args) throws IOException {
	Scanner in = new Scanner(new FileReader ("cautbin.in"));
	PrintWriter out = new PrintWriter(new FileWriter("cautbin.out"));
	int nr = in.nextInt();
	int[] a = new int[nr];
	for (int i = 0 ; i < nr ; i ++)
		a[i] = in.nextInt();
	int nrcom = in.nextInt();
	for (int i = 0; i < nrcom ;i++){
		int com = in.nextInt();
		if (com == 0)
			out.println(new ex().cauta(a,0,a.length-1,in.nextInt()));
		else
			if (com == 1)
				out.println(new ex().cau(a,0,a.length-1,in.nextInt()));
			else out.println(new ex().cautam(a,0,a.length-1,in.nextInt()));
	}
	in.close();
	out.close();
}
}