/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
// public static void main(String[] args) {
// int arr[]={1,3,-1,-3,5,3,6,7};
// int k=3;
// int l=0,r=3-l-1;
// List<Integer> min =new ArrayList<>();
// List<Integer> max =new ArrayList<>();
// while(l < arr.length && r< arr.length){
// Deque<Integer> dq = designIncresingQueue(arr,l,r);
// Deque<Integer> dq2 = designDecresingQueue(arr,l,r);
// r++;
// l++;
// min.add(arr[dq.peekFirst()]);
// max.add(arr[dq2.peekFirst()]);
// }
// System.out.println(min);
// System.out.println(max);
// }
public static void main
(String[] args
) { int[] arr = {1,3,-1,-3,5,3,6,7};
int k = 3; // window size
List<Integer> min = new ArrayList<>();
List<Integer> max = new ArrayList<>();
Deque<Integer> minDq = new ArrayDeque<>();
Deque<Integer> maxDq = new ArrayDeque<>();
int l = 0;
for (int r = 0; r < arr.length; r++) {
// maintain increasing deque (min)
while (!minDq.isEmpty() && arr[minDq.peekLast()] > arr[r]) {
minDq.pollLast();
}
minDq.addLast(r);
// maintain decreasing deque (max)
while (!maxDq.isEmpty() && arr[maxDq.peekLast()] < arr[r]) {
maxDq.pollLast();
}
maxDq.addLast(r);
// window size reached
if (r - l + 1 == k) {
min.add(arr[minDq.peekFirst()]);
max.add(arr[maxDq.peekFirst()]);
// remove out of window
if (minDq.peekFirst() == l) {
minDq.pollFirst();
}
if (maxDq.peekFirst() == l) {
maxDq.pollFirst();
}
l++;
}
}
System.
out.
println("Min: " + min
); System.
out.
println("Max: " + max
); }
public static Deque<Integer> designIncresingQueue(int []arr,int start,int end){
Deque<Integer> dq = new ArrayDeque<>();
for(int i=start;i<=end;i++){
while(!dq.isEmpty() && arr[dq.peekLast()] > arr[i]){
dq.pollLast();
}
dq.offerLast(i);
}
return dq;
}
public static Deque<Integer> designDecresingQueue(int []arr,int start,int end){
Deque<Integer> dq = new ArrayDeque<>();
for(int i=start;i<=end;i++){
while(!dq.isEmpty() && arr[dq.peekLast()] < arr[i]){
dq.pollLast();
}
dq.offerLast(i);
}
return dq;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCS8vIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgCiAgICAgICAKIC8vICAgICAgIGludCBhcnJbXT17MSwzLC0xLC0zLDUsMyw2LDd9OwogLy8gICAgICAgaW50IGs9MzsKIC8vICAgICAgIGludCBsPTAscj0zLWwtMTsKIC8vICAgICAgIExpc3Q8SW50ZWdlcj4gbWluID1uZXcgQXJyYXlMaXN0PD4oKTsKIC8vICAgICAgIExpc3Q8SW50ZWdlcj4gbWF4ID1uZXcgQXJyYXlMaXN0PD4oKTsKIC8vICAgICAgIHdoaWxlKGwgPCBhcnIubGVuZ3RoICYmIHI8IGFyci5sZW5ndGgpewogLy8gICAgICAgICAgIERlcXVlPEludGVnZXI+IGRxID0gZGVzaWduSW5jcmVzaW5nUXVldWUoYXJyLGwscik7CiAvLyAgICAgICAgICAgRGVxdWU8SW50ZWdlcj4gZHEyID0gZGVzaWduRGVjcmVzaW5nUXVldWUoYXJyLGwscik7CiAvLyAgICAgICAgICAgcisrOwogLy8gICAgICAgICAgIGwrKzsKIC8vICAgICAgICAgICBtaW4uYWRkKGFycltkcS5wZWVrRmlyc3QoKV0pOwogLy8gICAgICAgICAgIG1heC5hZGQoYXJyW2RxMi5wZWVrRmlyc3QoKV0pOwogLy8gICAgICAgfQogLy8gICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1pbik7CiAvLyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWF4KTsKIC8vICAgfQogCiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBpbnRbXSBhcnIgPSB7MSwzLC0xLC0zLDUsMyw2LDd9OwogICAgICAgIGludCBrID0gMzsgLy8gd2luZG93IHNpemUKCiAgICAgICAgTGlzdDxJbnRlZ2VyPiBtaW4gPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBMaXN0PEludGVnZXI+IG1heCA9IG5ldyBBcnJheUxpc3Q8PigpOwoKICAgICAgICBEZXF1ZTxJbnRlZ2VyPiBtaW5EcSA9IG5ldyBBcnJheURlcXVlPD4oKTsKICAgICAgICBEZXF1ZTxJbnRlZ2VyPiBtYXhEcSA9IG5ldyBBcnJheURlcXVlPD4oKTsKCiAgICAgICAgaW50IGwgPSAwOwoKICAgICAgICBmb3IgKGludCByID0gMDsgciA8IGFyci5sZW5ndGg7IHIrKykgewoKICAgICAgICAgICAgLy8gbWFpbnRhaW4gaW5jcmVhc2luZyBkZXF1ZSAobWluKQogICAgICAgICAgICB3aGlsZSAoIW1pbkRxLmlzRW1wdHkoKSAmJiBhcnJbbWluRHEucGVla0xhc3QoKV0gPiBhcnJbcl0pIHsKICAgICAgICAgICAgICAgIG1pbkRxLnBvbGxMYXN0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWluRHEuYWRkTGFzdChyKTsKCiAgICAgICAgICAgIC8vIG1haW50YWluIGRlY3JlYXNpbmcgZGVxdWUgKG1heCkKICAgICAgICAgICAgd2hpbGUgKCFtYXhEcS5pc0VtcHR5KCkgJiYgYXJyW21heERxLnBlZWtMYXN0KCldIDwgYXJyW3JdKSB7CiAgICAgICAgICAgICAgICBtYXhEcS5wb2xsTGFzdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1heERxLmFkZExhc3Qocik7CgogICAgICAgICAgICAvLyB3aW5kb3cgc2l6ZSByZWFjaGVkCiAgICAgICAgICAgIGlmIChyIC0gbCArIDEgPT0gaykgewoKICAgICAgICAgICAgICAgIG1pbi5hZGQoYXJyW21pbkRxLnBlZWtGaXJzdCgpXSk7CiAgICAgICAgICAgICAgICBtYXguYWRkKGFyclttYXhEcS5wZWVrRmlyc3QoKV0pOwoKICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvdXQgb2Ygd2luZG93CiAgICAgICAgICAgICAgICBpZiAobWluRHEucGVla0ZpcnN0KCkgPT0gbCkgewogICAgICAgICAgICAgICAgICAgIG1pbkRxLnBvbGxGaXJzdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG1heERxLnBlZWtGaXJzdCgpID09IGwpIHsKICAgICAgICAgICAgICAgICAgICBtYXhEcS5wb2xsRmlyc3QoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBsKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWluOiAiICsgbWluKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1heDogIiArIG1heCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgIERlcXVlPEludGVnZXI+IGRlc2lnbkluY3Jlc2luZ1F1ZXVlKGludCBbXWFycixpbnQgc3RhcnQsaW50IGVuZCl7CiAgICAgICAgRGVxdWU8SW50ZWdlcj4gZHEgPSBuZXcgQXJyYXlEZXF1ZTw+KCk7CiAgICAgICAgZm9yKGludCBpPXN0YXJ0O2k8PWVuZDtpKyspewogICAgICAgICAgICB3aGlsZSghZHEuaXNFbXB0eSgpICYmIGFycltkcS5wZWVrTGFzdCgpXSA+IGFycltpXSl7CiAgICAgICAgICAgICAgICBkcS5wb2xsTGFzdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRxLm9mZmVyTGFzdChpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRxOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljICBEZXF1ZTxJbnRlZ2VyPiBkZXNpZ25EZWNyZXNpbmdRdWV1ZShpbnQgW11hcnIsaW50IHN0YXJ0LGludCBlbmQpewogICAgICAgIERlcXVlPEludGVnZXI+IGRxID0gbmV3IEFycmF5RGVxdWU8PigpOwogICAgICAgIGZvcihpbnQgaT1zdGFydDtpPD1lbmQ7aSsrKXsKICAgICAgICAgICAgd2hpbGUoIWRxLmlzRW1wdHkoKSAmJiBhcnJbZHEucGVla0xhc3QoKV0gPCBhcnJbaV0pewogICAgICAgICAgICAgICAgZHEucG9sbExhc3QoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkcS5vZmZlckxhc3QoaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkcTsKICAgIH0KfQ==
Min: [-1, -3, -3, -3, 3, 3]
Max: [3, 3, 5, 5, 6, 7]