#include <iostream>
#include <vector>
#include <deque>using namespace std;int main() {int n, m;cin >> n >> m;vector<int> a(n);for (int i = 0; i < n; ++i) {cin >> a[i];}deque<int> max_q; // 单调递减队列(队首是当前窗口最大值)deque<int> min_q; // 单调递增队列(队首是当前窗口最小值)vector<int> max_res; // 存储每个窗口的最大值vector<int> min_res; // 存储每个窗口的最小值for (int i = 0; i < n; ++i) {// 1. 移除不在当前窗口内的元素(从队首弹出)while (!max_q.empty() && max_q.front() <= i - m) {max_q.pop_front();}while (!min_q.empty() && min_q.front() <= i - m) {min_q.pop_front();}// 2. 维护单调递减队列(最大值)while (!max_q.empty() && a[max_q.back()] <= a[i]) {max_q.pop_back();}max_q.push_back(i);// 3. 维护单调递增队列(最小值)while (!min_q.empty() && a[min_q.back()] >= a[i]) {min_q.pop_back();}min_q.push_back(i);// 4. 当窗口形成时,记录最大值和最小值if (i >= m - 1) {max_res.push_back(a[max_q.front()]);min_res.push_back(a[min_q.front()]);}}// 输出结果cout << "最大值序列: ";for (int num : max_res) {cout << num << " ";}cout << endl;cout << "最小值序列: ";for (int num : min_res) {cout << num << " ";}cout << endl;return 0;
}