前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >洛谷P2251 质量检测

洛谷P2251 质量检测

作者头像
attack
发布2018-04-11 16:59:54
6310
发布2018-04-11 16:59:54
举报

题目背景

题目描述

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

代码语言:javascript
复制
10 4
16 5 6 9 5 13 14 20 8 12

输出样例#1: 

代码语言:javascript
复制
5
5
5
5
5
8
8

说明

[数据范围]

30%的数据,N <= 1000

100%的数据,N <= 100000

100%的数据,M <= N, A <= 1 000 000

单调队列裸题

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<deque>
 7 #define LL long long 
 8 #define lb(x)    ((x)&(-x))
 9 using namespace std;
10 const int MAXN=1000001;
11 inline int read()
12 {
13     char c=getchar();int x=0,f=1;
14     while(c<'0'||c>'9')    {if(c=='-')    f=-1;c=getchar();}
15     while(c>='0'&&c<='9')    x=x*10+c-48,c=getchar();return x*f;
16 }
17 struct node
18 {
19     int pos,val;
20     node(){    pos=val=0;    }
21     node(int a,int b){    pos=a,val=b;     }
22 };
23 deque<node>q;
24 int a[MAXN];
25 int main()
26 {
27     int n=read(),m=read();
28     for(int i=1;i<=n;i++)
29         a[i]=read();
30     for(int i=1;i<=n;i++)
31     {
32         while(q.size()>0&&i-m>=q.front().pos)    q.pop_front();
33         while(q.size()>0&&a[i]<=q.back().val)        q.pop_back();
34         q.push_back(node(i,a[i]));
35         if(i>=m)    printf("%d\n",q.front().val);    
36     }
37     return 0;
38 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目背景
  • 题目描述
  • 输入输出格式
  • 输入输出样例
  • 说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档