洛谷P1886

P1886 滑动窗口 /【模板】单调队列

额啊,这破模板题,单调队列一定要存数组下标

点击查看代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];

    deque<int> q;

    // 最小值
    for (int i = 0; i < n; i++) {
        // 保持单调递增:队尾元素比当前元素大,就弹出
        while (!q.empty() && a[q.back()] >= a[i]) q.pop_back();
        q.push_back(i);

        // 超出窗口左边界,弹出
        if (q.front() <= i - k) q.pop_front();

        if (i >= k - 1) cout << a[q.front()] << ' ';
    }

    cout << '\n';
    q.clear();

    // 最大值
    for (int i = 0; i < n; i++) {
        // 保持单调递减:队尾元素比当前元素小,就弹出
        while (!q.empty() && a[q.back()] <= a[i]) q.pop_back();
        q.push_back(i);

        // 超出窗口左边界,弹出
        if (q.front() <= i - k) q.pop_front();

        if (i >= k - 1) cout << a[q.front()] << ' ';
    }

    cout << '\n';
    return 0;
}

posted @ 2025-05-14 13:34  Chuan81  阅读(2)  评论(0)    收藏  举报