• 【洛谷 2251】质量检测


    题目背景

    题目描述

    为了检测生产流水线上总共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

    题解:ST表题目,但我用线段树%%%

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define ri register int
    #define lson o<<1
    #define rson o<<1|1
    #define N 100000
    using namespace std;
    int a[N+1],Min[N<<2+1],add[N<<2+1];
    int n,m;
    inline int read()
    {
        int res=0,flag=1;
        char ch;
        for(;!isdigit(ch);ch=getchar())
            if(ch=='-')flag=-1;
        for(;isdigit(ch);ch=getchar())
            res=res*10+ch-48;
        return res*flag;
    }
    inline int push_up(int o)
    {
        Min[o]=min(Min[lson],Min[rson]);
    }
    inline int push_down(int o)
    {
        if(!add[o])return 0;
        add[lson]+=add[o];
        add[rson]+=add[o];
        Min[lson]+=add[o];
        Min[rson]+=add[o];
        add[o]=0;
    }
    inline int build(int o,int l,int r)
    {
        add[o]=0;
        if(l==r)
        {
            Min[o]=a[l];
            return 0;
        }
        int mid=(l+r)>>1;
        build(lson,l,mid);
        build(rson,mid+1,r);
        push_up(o);
    }
    inline int query(int o,int l,int r,int ql,int qr)
    {
        if(ql<=l&&r<=qr)return Min[o];
        int mid=(l+r)>>1,ans=0x7fffffff;
        if(ql<=mid)ans=min(ans,query(lson,l,mid,ql,qr));
        if(qr>mid)ans=min(ans,query(rson,mid+1,r,ql,qr));
        return ans;
    }
    int main()
    {
        n=read();m=read();
        for(ri i=1;i<=n;i++)a[i]=read();
        build(1,1,n);
        for(ri i=1;i<=n-m+1;i++)
            printf("%d
    ",query(1,1,n,i,i+m-1));
        return 0;
    }
  • 相关阅读:
    章节十:Selenium
    章节七:csv&excel
    章节十三:协程实践
    章节十二:协程
    章节八:爬取知乎文章
    章节十五:Scrapy实操
    章节十六:复习与反爬虫
    章节十一:定时与邮件
    章节十四:Scrapy框架
    阅读习惯2
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11193218.html
Copyright © 2020-2023  润新知