HackerEarth Danny ! problem solution YASH PAL, 31 July 2024 In this HackerEarth Danny! problem solution You are given a sequence of positive integers in the form of an array A of size N and a number K. Now, you need to perform a certain procedure over this sequence that is as follows :For each pair (i,j), where 1 <= i < j <= N store in a list | A[i] – A[j] |Sort this list in non-decreasing orderPrint the Kth element of this list (1 indexed)Note that X denotes the absolute value of any integer XYou need to perform the following procedure and print to output whatever it leads to. Can you do it ?HackerEarth Danny! problem solution.import java.io.*;import java.util.*;import java.math.*;public final class solution{ static BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); static FastScanner sc=new FastScanner(br); static PrintWriter out=new PrintWriter(System.out); static Random rnd=new Random(); static int n; static long k; static long[] a; static void shuffle(long[] a) { for(int i=0;i<a.length;i++) { int next=rnd.nextInt(a.length); long temp=a[i];a[i]=a[next];a[next]=temp; } } static boolean check(long val) { long ret=0; for(int i=1;i<n;i++) { int low=0,high=i; while(low<high) { int mid=(low+high+1)>>1; if(a[i]-a[i-mid]<=val) { low=mid; } else { high=mid-1; } } if(a[i]-a[i-low]<=val) ret+=low; } return (ret>=k); } public static void main(String args[]) throws Exception { n=sc.nextInt();k=sc.nextLong();a=new long[n]; if(n<2 || n>200000) throw new Exception("Wrong!"); long now = (((long)n)*((long)n-1))/2; if(k<1 || k>now) { throw new Exception("Wrong!"); } for(int i=0;i<n;i++) { a[i]=sc.nextLong(); if(a[i]<1 || a[i]>(int)(1e9)) { throw new Exception("Wrong!"); } } shuffle(a);Arrays.sort(a); long low=0,high=(long)(1e9); while(low<high) { long mid=(low+high)>>1; if(check(mid)) { high=mid; } else { low=mid+1; } } out.println(low);out.close(); }}class FastScanner{ BufferedReader in; StringTokenizer st; public FastScanner(BufferedReader in) { this.in = in; } public String nextToken() throws Exception { while (st == null || !st.hasMoreTokens()) { st = new StringTokenizer(in.readLine()); } return st.nextToken(); } public String next() throws Exception { return nextToken().toString(); } public int nextInt() throws Exception { return Integer.parseInt(nextToken()); } public long nextLong() throws Exception { return Long.parseLong(nextToken()); } public double nextDouble() throws Exception { return Double.parseDouble(nextToken()); }}Second solution#include <iostream>#include <vector>#include <algorithm>using namespace std;const int INF = 1000000005;long long int f(int diff, vector <int> &A){ long long int ret = 0; for (int i = 0; i < A.size(); ++i) { vector <int>::iterator it = lower_bound(A.begin(), A.end(), A[i] - diff); int pos = (it - A.begin()); ret+=(i - pos); } return ret;}int main(){ int n; long long int k; cin>>n>>k; vector <int> A(n); for (int i = 0; i < n; ++i) { cin>>A[i]; } sort(A.begin(), A.end()); int lo = 0, hi = INF, mid; while(lo < hi) { mid = (lo + hi)/2; if(f(mid,A) >= k) hi = mid; else lo = mid + 1; } cout<<lo<<"n"; return 0;} coding problems solutions