声明:这是本人的第一篇博客,如有错误请多加指正,虚心接受意见和批评,欢迎一起学习和讨论问题.
单调队列:估计学过算法和数据结构的人都不会陌生,在队列的基础上,让我们谈论一下单调队列的问题,首先呢单调队列是用来维护区间最值的(单调递减序列,维护区间最大值,反之亦成立),单调区间的最值永远都在头部放着,队列尾部插入元素,为了维护单调性,待插入元素会把所有违反单调性的元素踢出去,当前区间的最大值永远是单调队列的队首元素.
通俗一点来说,比你入队晚,性质还比你好的元素就会把队列里的某些元素踢掉,被踢掉的元素永远不会有机会成为一定范围内的最值.
下面一道经典的例题,最大子序和来帮助读者进一步去理解单调队列.
题目链接:http://oj.haizeix.com/problem/270
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
#define SIZE 300000
ll arr[SIZE], ans;
int que[SIZE];
int