import java.awt.print.Printable;
import java.beans.VetoableChangeListenerProxy;
import java.lang.reflect.Array;
import java.text.DateFormatSymbols;
import java.text.spi.NumberFormatProvider;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
import javax.naming.ldap.SortControl;
import javax.print.attribute.standard.NumberUpSupported;
import javax.print.attribute.standard.RequestingUserName;
import org.omg.PortableInterceptor.INACTIVE;
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size)
{
ArrayList<Integer> maxWindows=new ArrayList<>();
Deque<Integer> index=new ArrayDeque<>();
if(num.length>=size&&size>=1)
{
for(int i=0;i<size;i++)
{
if(!index.isEmpty()&&num[i]>=num[index.getLast()])
index.removeLast();
index.addLast(i);
}
maxWindows.add(num[index.getFirst()]);
for(int i=size;i<num.length;i++)
{
while(!index.isEmpty()&&num[index.getLast()]<=num[i])
{
int ix=index.getLast();
index.removeLast();
}
if(!index.isEmpty()&&index.peek()<=i-size)
index.removeFirst();
index.addLast(i);
maxWindows.add(num[index.peek()]);
}
}
return maxWindows;
}
}