β Choose points (Contest)
Choose points easy Time Limit: 2 sec Memory Limit: 128000 kB
import java.io.*; // for handling input/output
import java.util.*; // contains Collections framework
// don't change the name of this class
// you can add inner classes if needed
class Main {
public static void main (String[] args)throws Exception {
// Your code here
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line1=br.readLine();
String []line1Arr=line1.split(" ");
long n=Long.parseLong(line1Arr[0]);
long d=Long.parseLong(line1Arr[1]);
long[]valueArr=new long[(int)n];
String line2=br.readLine();
String[]line2Arr=line2.split(" ");
for(int i=0;i<n;i++){
valueArr[i]=Long.parseLong(line2Arr[i]);
}
Arrays.sort(valueArr);
System.out.print(choosePoint(valueArr,n,d));
}
static long choosePoint(long[]a,long n,long d){
long ways=0;
if(d==n){
return 0;
}
for(int i=0;i<n;i++){
long higherIndex=upperLimit(a,0,n,a[i]+d);
long numberOfEelements=higherIndex-(i+1);
if(numberOfEelements >=2){
ways +=(numberOfEelements*(numberOfEelements-1)/2);
}
}
return ways;
}
static long upperLimit(long[]a,long low,long high,long d){
while(low<high){
long middle=(long)low+(high-low)/2;
if(a[(int)middle]>d)
high=middle;
else
low=middle+1;
}
return low;
}
}Last updated