序号:3503
质量检测
Time Limit:1s Memory Limit:125MB
题目描述
为了检测生产流水线上总共 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 再做进一步评估。
请你尽快求出 Q 序列。
输入格式
输入共两行。
第一行共两个数 N、M,由空格隔开。含义如前述。
第二行共 N 个数,表示 N 件产品的质量。
输出格式
输出共 N−M+1 行。
第 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
说明/提示
[数据范围]
30%的数据,N≤1000
100%的数据,N≤100000
100%的数据,M≤N,A≤1000000
#include<bits/stdc++.h>
using namespace std;
#define de(x) cout<<x<<" ";
#define sf(x) scanf("%d",&x);
#define Pu puts("");
#define ll long long
const ll N=1e6+10;
ll cnt[N];
priority_queue<int,vector<int>,greater<int> >q;
ll n,m;
ll a[N];
int main(){
cin>>n>>m;
for(ll i=1;i<=n;i++){
sf(a[i])
if(i<=m-1){
q.push(a[i]);
cnt[a[i]]++;
}
}
for(ll i=m;i<=n;i++){
q.push(a[i]);
cnt[a[i]]++;
while(cnt[q.top()]<=0){
q.pop();
}
printf("%d\n",q.top());
cnt[a[i-m+1]]--;
}
return 0;
}