zoukankan      html  css  js  c++  java
  • [LUOGU] P2251 质量检测

    题目背景
    无
    
    题目描述
    为了检测生产流水线上总共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 <= 1 000 000

    单调队列裸题

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    inline int rd(){
        int ret=0,f=1;char c;
        while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;
        while(isdigit(c))ret=ret*10+c-'0',c=getchar();
        return ret*f;
    }
    
    const int MAXN=1000005;
    
    int n,m;
    int a[MAXN];
    int q[MAXN],h,t;
    int main(){
        n=rd();
        m=rd();
        for(int i=1;i<=n;i++) a[i]=rd();
        for(int i=1;i<=n;i++){
            while(h<=t&&a[q[t]]>a[i])t--;
            q[++t]=i;
            while(h<=t&&q[h]+m<=i) h++;
            if(i>=m)printf("%d
    ",a[q[h]]);
        }
    }

    本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9247382.html

  • 相关阅读:
    Java学习8.31
    Java学习8.30
    Java学习8.29
    Java学习8.28
    Java学习8.27
    Java学习8.26
    242. Valid Anagram 有效的字符串
    680. Valid Palindrome II 对称字符串-可删一个字母版本
    151. Reverse Words in a String翻转一句话中的单词
    155. Min Stack 155.最小栈
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9247382.html
Copyright © 2011-2022 走看看