简单数据结构总结——单调队列
单调队列一般是具有单调性的队列废话
视具体题目而定,单调队列有单调递增和单调递减两种,一般来讲,队列的队首是整个队列的最大值或最小值
单调队列可以解决许多问题,而且可以用来优化DP,但是这里不讲因为我还不会‘
下面简单的介绍一下单调队列的实现
具体步骤:
- 若队列为空,将A[i]从队尾入队
- 若队列不为空,将比A[i]大的元素都从队尾弹出,然后把A[i]入队
- 若队列不为空且A[i]大于队尾,则直接从队尾把A[i]入队
实现一般采用双端队列主要因为好写当然也可以自己手写
下面放出代码
1 if(q.empty()) 2 q.push_back(A[i]); 3 else if(q.back()>A[i]){ 4 while((!q.empty())&&q.back()>A[i]){ 5 q.pop_back(); 6 } 7 q.push_back(A[i]); 8 } 9 else 10 q.push_back(A[i]);
优美简洁
单调队列有许多作用:
比如可以求出一个数组内第一个大于等于一个数x的数
也可以通过维护单调性,解决一些区间内最小或最大的问题
总之单调队列的应用在根本上要视题目而定的灵活运用
本质上并不复杂