洛谷 P2251 質量檢測

題目背景

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]。含義如前述。產品

 

輸入輸出樣例

輸入樣例#1: 複製
10 4
16 5 6 9 5 13 14 20 8 12
輸出樣例#1: 複製
5
5
5
5
5
8
8

說明

[數據範圍]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));
    }
}
100
相關文章
相關標籤/搜索