#include<iostream> #include<vector> #include<deque> using namespace std; void getMaxWindow(vector<int>& nums,vector<int>& res,int w){ if(nums.size() == 0 || w < 1 || nums.size() < w){ return; } deque<int> q; for(int i = 0; i < nums.size(); ++i){ //如果队尾的元素比当前的元素小,将队尾元素弹出,目的就是为了让队头保持最大值 while(!q.empty() && nums[i] > nums[q.back()]){ q.pop_back(); } //这个时候要么队列为空,要么当前元素小于等于队尾元素 q.push_back(i); //现在需要判断当前下标是否过期 //已经过期 if(q.front() == i - w){ q.pop_front(); } //从下标为 w-1 的坐标开始每次都有窗口最大值 if(i >= w - 1){ res.push_back(nums[q.front()]); } } } int main(){ int n,w; while(cin >> n >> w){ vector<int> nums(n); for(int i = 0; i < n; ++i){ cin >> nums[i]; } vector<int> res; getMaxWindow(nums,res,w); for(int i = 0; i < res.size(); ++i){ cout << res[i] << " "; } cout << endl; } return 0; }