洛谷 P1440 求m區間內的最小值
阿新 • • 發佈:2020-11-04
洛谷 P1440 求m區間內的最小值
題目描述
一個含有 nn 項的數列,求出每一項前的 mm 個數到它這個區間內的最小值。若前面的數不足 mm 項則從第 11 個數開始,若前面沒有數則輸出 00。
輸入格式
第一行兩個整數,分別表示 nn,mm。
第二行,nn 個正整數,為所給定的數列 a_ia**i。
輸出格式
nn 行,每行一個整數,第 ii 個數為序列中 a_ia**i 之前 mm 個數的最小值。
題解:
滑動視窗。
程式碼:
#include<cstdio> #include<deque> using namespace std; const int maxn=2e6+6; int n,k; int a[maxn]; deque<pair<int,int> > q; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); puts("0"); for(int i=2;i<=n;i++) { while(!q.empty() && a[i-1]<q.back().second) q.pop_back(); q.push_back(make_pair(i-1,a[i-1])); while(q.front().first<=i-1-k) q.pop_front(); printf("%d\n",q.front().second); } return 0; }