There are multiple test cases.
For each test case, the first line has three integers, n, m and k. n is the length of the sequence and is in the range [1, 100000]. m and k are in the range [0, 1000000]. The second line has n integers, which are all in the range [0, 1000000].
Proceed to the end of file.
For each test case, print the length of the subsequence on a single line.
5 0 0 1 1 1 1 1 5 0 3 1 2 3 4 5
5 4
import java.util.LinkedList; import java.util.Scanner; public class Main { public static int LongestDiffLength(int[] arr,int m,int k) { if(arr == null || arr.length == 0) return 0; LinkedList<Integer> qmin = new LinkedList<Integer>(); LinkedList<Integer> qmax = new LinkedList<Integer>(); int i = 0; int start = 0; int max = 0; while(i < arr.length) { while(!qmin.isEmpty() && arr[qmin.peekLast()] > arr[i]) { qmin.pollLast(); } qmin.addLast(i); while(!qmax.isEmpty() && arr[qmax.peekLast()] < arr[i]) { qmax.pollLast(); } qmax.addLast(i); while(arr[qmax.getFirst()] - arr[qmin.getFirst()] > k) { if (qmax.getFirst() < qmin.getFirst()) { start = qmax.peekFirst() + 1; qmax.pollFirst(); }else { start = qmin.peekFirst() + 1; qmin.pollFirst(); } } if(arr[qmax.getFirst()] - arr[qmin.getFirst()] >= m) { max = Math.max(max, i - start + 1); } i++; } return max; } public static void main(String[] args) { int n; int m; int k; Scanner sc = new Scanner(System.in); while (sc.hasNext()) { n = sc.nextInt(); int[] Arr = new int[n]; m = sc.nextInt(); k = sc.nextInt(); for(int i = 0; i < n;i++) { Arr[i] = sc.nextInt(); } System.out.println(LongestDiffLength(Arr,m,k)); } } }