when i run my code it is showing always 0 as output. this code is about binary search. and i am using buffer reader for input.
import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Main mainclass= new Main();
int t =Integer.parseInt(in.readLine());
for(int i = 0;i<t;i++)
{ StringTokenizer tokenizer = new StringTokenizer(in.readLine());
int N = Integer.parseInt(tokenizer.nextToken());
int C = Integer.parseInt(tokenizer.nextToken());
int[] arr= new int[N];
for(int x=0;x<N;x++)
{ arr[i] =Integer.parseInt(in.readLine());}
int res= mainclass.bs(N,C,arr);
System.out.println(res);
}
}
it is bs() method inside Main class. I am actually solving problem on aggresive cows of SPOJ. here is the link: https://www.spoj.com/problems/AGGRCOW/
public int bs(int N,int C,int[] arr)
{ Arrays.sort(arr);
int left = 0;int right = arr[N-1]-arr[0];int mid = arr[N-1]-arr[0];
int check = 0; int max= -1;
while(left<right){
int temp= checker(mid,arr);
if(temp>=C)
{ if(max<mid)
max=mid;
left = mid+1;
mid = (left+right)/2; }
else
{
right= mid;
mid=(left+right)/2;
}
}
return max;
}
public int checker(int mid,int[] arr)
{ int N = arr.length;int f=0;int cows=1;
for(int i=0;i<N-1;i++)
{
if((arr[i+1]-arr[f])>=mid)
{
f=i+1;
cows++;
}
}
return cows;
}
}