单调队列
队列,从一头进入,从另一头删除的数据结构。
第一步:初始化
|_|
|_|
|_|
|_|
|_|
|_| t=h=0
第二步:从队尾加入一个元素8
|_|
|_|
|_|
|_|
|8| t=1
|_| h=0
第三步:从队尾删除一个元素
|_|
|_|
|_|
|_|
|8|
|_| t=h=0
在这里虽然8仍然存在,但是由于t=0,所以下次如果在加入一个元素会将其覆盖掉,所以我们认为t--,就是对数据的删除
队列的典型的题目是:poj 2823 http://poj.org/problem?id=2823
代码如下:

#include <stdio.h> #include <string.h> #include <iostream> using namespace std; #define N 1000010 struct node{ int m, d; }Inc[N], Dec[N]; int mi[N], mx[N], k; bool cmpMAX(const int &a, const int &b){ return a>b; } bool cmpMIN(const int &a, const int &b){ return a<b; } void chk(int i, int &head, int &tail, node c[], bool cmp(const int &a, const int &b), int num) { //添加新节点到队尾,并删掉过期的头节点 while(tail >= head && cmp(c[tail].m, num)) tail--; c[++tail].m = num; c[tail].d = i; while(cmpMAX(i-c[head].d+1, k)) head++;//更新了一下head,如果保存的不在可视框内,则不应该考虑,否则wa } void solve() { int n, i, j, id=0, num; int head_I=0, tail_I=0, head_D=0, tail_D=0; scanf("%d%d", &n, &k); if(n>0 && k>=1) //初始化化队列里的第一个点 { scanf("%d", &num); Inc[0].m = Dec[0].m = num; Inc[0].d = Dec[0].d = 0; } for(i=1; i<k; i++) //初始化视窗中的点: 加入队列 { scanf("%d", &num); chk(i, head_I, tail_I, Inc, cmpMIN, num); chk(i, head_D, tail_D, Dec, cmpMAX, num); } mi[id] = Inc[head_I].m; mx[id++] = Dec[head_D].m; for(; i<n; i++) //添加并更新 { scanf("%d", &num); chk(i, head_I, tail_I, Inc, cmpMIN, num); chk(i, head_D, tail_D, Dec, cmpMAX, num); mi[id] = Inc[head_I].m; mx[id++] = Dec[head_D].m; } printf("%d", mx[0]); for(i=1; i<id; i++) printf(" %d", mx[i]); printf("\n%d", mi[0]); for(i=1; i<id; i++) printf(" %d", mi[i]); printf("\n"); } int main() { solve(); return 0; }
posted on 2012-08-14 16:57 More study needed. 阅读(160) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架