zoukankan      html  css  js  c++  java
  • 【洛谷 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;
    }
  • 相关阅读:

    c#常用的基础概念
    Visual Studio2010+SOS.dll调试入门 摘自 http://www.cnblogs.com/luminji/archive/2011/01/27/1946217.html
    优化数据库之前的10个问题
    js数组清空的两种方式
    我的资源(网站, 工具)
    iis使用十大原则
    SQL2005分页存储过程
    温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
    无法获得数据库 'model' 上的排他锁 网上搜索结果 IT
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11193218.html
Copyright © 2011-2022 走看看