看紫书看到了 滑动窗口最小值问题 觉得有必要来记录一下
首先是给出问题 5,2,6,8,10,7,4 k=4
使用优先队列:
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int a[1000005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
vector<int> v_min;
vector<int> v_max;
for(int k=1;k<=n;k++){
int start=1;
int last=k;
while(last<=n){
priority_queue<int> pq1;//大顶堆
priority_queue<int,vector<int>,greater<int> > pq2;//小顶堆
for(int i=start;i<=last;i++) pq2.push(a[i]);
for(int i=start;i<=last;i++) pq1.push(a[i]);
v_min.push_back(pq2.top());
v_max.push_back(pq1.top());
start++;
last++;
//cout<<"last="<<last<<endl;
}
cout<<"k="<<k<<endl;
for(int i=0;i<v_min.size();i++) cout<<v_min[i]<<" ";
cout<<endl;
for(int i=0;i<v_max.size();i++) cout<<v_max[i]<<" ";
cout<<endl;
v_min.clear();
v_max.clear();
}
}
/*
8
1 3 -1 -3 5 3 6 7
*/
这个代码求的是k=1-n情况下,序列的最大值和最小值.
单调队列
#include<iostream>
#include<vector>
using