題目背景
無ios
題目描述
爲了檢測生產流水線上總共N件產品的質量,咱們首先給每一件產品打一個分數A表示其品質,而後統計前M件產品中質量最差的產品的分值Q[m] = min{A1, A2, ... Am},以及第2至第M + 1件的Q[m + 1], Q[m + 2] ... 最後統計第N - M + 1至第N件的Q[n]。根據Q再作進一步評估。ide
請你儘快求出Q序列。spa
輸入輸出格式
輸入格式:
輸入共兩行。code
第一行共兩個數N、M,由空格隔開。含義如前述。blog
第二行共N個數,表示N件產品的質量。get
輸出格式:
輸出共N - M + 1行。string
第1至N - M + 1行每行一個數,第i行的數Q[i + M - 1]。含義如前述。產品
輸入輸出樣例
說明
[數據範圍]it
30%的數據,N <= 1000io
100%的數據,N <= 100000
100%的數據,M <= N, A <= 1 000 000
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,m; int st[1000010][21]; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int query(int l,int r){ int k=log2(r-l+1); return min(st[l][k],st[r-(1<<k)+1][k]); } int main(){ n=read();m=read(); for(int i=1;i<=n;i++) st[i][0]=read(); for(int j=1;j<=21;j++) for(int i=1;i+(1<<j)-1<=n;i++) st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]); for(int i=1;i<=n-m+1;i++){ int l=i,r=i+m-1; printf("%d\n",query(l,r)); } }