码迷,mamicode.com
首页 > 其他好文 > 详细

单调队列的基本运用模版

时间:2020-06-28 00:34:14      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:color   队列   for   while   位置   span   i++   style   inf   

    // 最后一个 >= 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;
    }

 

单调队列的基本运用模版

标签:color   队列   for   while   位置   span   i++   style   inf   

原文地址:https://www.cnblogs.com/-Ackerman/p/13200479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!