单调队列的基本运用模版

Posted -ackerman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单调队列的基本运用模版相关的知识,希望对你有一定的参考价值。

    // 最后一个 >= a[i] 的数的位置
    // 右边第一个 < a[i] 的数的位置
    int cnt;
    q[1] = n + 1;
    cnt = 1;
    a[n + 1] = -INF;
    for (int i = n; i >= 1; i--) {
        while (cnt && a[q[cnt]] >= a[i])
            cnt--;
        f1[i] = q[cnt] - 1;
        q[++cnt] = i;
    }
    // 左边第一个 < a[i] 的数的位置
    q[1] = 0;
    cnt = 1;
    a[0] = -INF;
    for (int i = 1;i <= n;i++) {
        while (cnt && a[q[cnt]] >= a[i])
            cnt--;
        f2[i] = q[cnt] + 1;
        q[++cnt] = i;
    }



 // 最后一个 <= a[i] 的数的位置

 // 右边第一个 > a[i] 的数的位置
    int cnt;
    q[1] = n + 1;
    cnt = 1;
    a[n + 1] = INF;
    for (int i = n; i >= 1; i--) {
        while (cnt && a[q[cnt]] <= a[i])
            cnt--;
        f1[i] = q[cnt] - 1;
        q[++cnt] = i;
    }
// 左边第一个 > a[i] 的数的位置
    q[1] = 0;
    cnt = 1;
    a[0] = INF;
    for (int i = 1;i <= n;i++) {
        while (cnt && a[q[cnt]] <= a[i])
            cnt--;
        f2[i] = q[cnt] + 1;
        q[++cnt] = i;
    }

 

以上是关于单调队列的基本运用模版的主要内容,如果未能解决你的问题,请参考以下文章

单调栈与队列的概念与练习!建议收藏

优先队列和单调队列一样吗?

基本单调队列

单调队列 单调栈

[数据结构读书笔记 ] 队列 以及 单调队列

[数据结构读书笔记 ] 队列 以及 单调队列