class Solution {
  public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        int que[10010], h = 0, t = -1;
        memset(que, 0, sizeof(que));
        vector<int>ans;
        for (int i = 0; i < num.size(); i++) {
            if (abs(i - que[h]) + 1 > size)h++;
            if (h > t)que[++t] = i;
            while (h <= t && num[i] >= num[que[t]])t--;
            que[++t] = i;
            if (i >= size - 1)ans.push_back(num[que[h]]);
        }
        return ans;
    }
};