标签:string 维护 none view ext str col pop splay
废话不多说,上代码
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<ctime> #include<cstdlib> #include<queue> using namespace std; int maxsize;//维持的长度 int que[1000005];//单调队列 int data[1000005];//维护的数据 int head,tail; int n,m; int main() { //这里以维护 长度为m的区间中的最大值 为例 cin>>n>>m; head=0; tail=0; for(int i=1; i<=n; i++) { scanf("%d",&data[i]); } for(int i=1; i<=n; i++) { for(; head<tail;) { if(data[que[tail-1]]>data[i]) { break; } tail--; } que[tail]=i; tail++; if(que[head]+m<=i) { head++; } printf("%d ",data[que[head]]); } return 0; }
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<ctime> #include<cstdlib> #include<queue> using namespace std; struct MonoQue{ int maxsize;//维持的长度 int que[1000005];//单调队列 int data[1000005];//维护的数据 int head,tail; void init(){ head=0; tail=0; } void push(int id){//向单调队列中加入并维护 for(;head<tail;){ if(data[que[tail-1]]>data[id]){ break; } tail--; } que[tail]=id; tail++; if(que[head]+maxsize<=id){ pop(); } } void pop(){ head++; } int quetop(){ return que[head]; } int top(){ return data[quetop()]; } }a; int n,m; int main(){//这里以维护 长度为m的区间中的最大值 为例 cin>>n>>m; a.maxsize=m; a.init(); for(int i=1;i<=n;i++){ scanf("%d",&a.data[i]); } for(int i=1;i<=n;i++){ a.push(i); printf("%d ",a.top()); } return 0; }
模板题:洛谷P1886滑动窗口
标签:string 维护 none view ext str col pop splay
原文地址:https://www.cnblogs.com/sun123zxy/p/monoque.html