洛谷P1440 求m区间内的最小值
来源:互联网 发布:网络音乐盛典歌曲 编辑:程序博客网 时间:2024/06/06 19:15
题目描述
一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值。若前面的数不足m项则从第1个数开始,若前面没有数则输出0。
输入输出格式
输入格式:第一行两个数n,m。
第二行,n个正整数,为所给定的数列。
输出格式:n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值。
输入输出样例
输入样例#1:
6 27 8 1 4 3 2
输出样例#1:
077113
说明
【数据规模】
m≤n≤2000000
一看到题目,以为是 RMQ问题,打了一发 ST表 ,结果 TLE 了两个点。。。
再一看数据,200W。。。
后来才想到了单调队列。。。
附代码:
#include<iostream>#include<algorithm>#include<cstdio>#define MAX 999999999#define MAXN 2000010using namespace std;int n,m,l=1,r=0,ans=MAX,a[MAXN];inline int read(){ int date=0,w=1;char c=0; while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();} while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();} return date*w;}int main(){ n=read();m=read(); for(int i=1;i<=n;i++){ a[i]=read(); if(ans==MAX)printf("0\n"); else printf("%d\n",ans); if(a[i]<ans)ans=a[i]; else if(r-l+1>=m&&ans==a[l]){ ans=MAX; for(int j=l+1;j<=r+1;j++) ans=min(ans,a[j]); } if(r-l+1>=m)l++; r++; } return 0;}
阅读全文
0 0
- 洛谷 P1440 求m区间内的最小值
- 洛谷 P1440 求m区间内的最小值
- 洛谷P1440 求m区间内的最小值
- 洛谷 P1440 求m区间内的最小值
- 【luogu P1440】求(DQ)M区间内的最小值
- 优先队列——洛谷P1440 求m区间内的最小值
- 【洛谷】P1440 求区间最小值
- 洛谷1440 求m区间内的最小值
- 【数据结构】[luoguP1440]求m区间内的最小值
- Oracle求连续区间内的最大最小值
- 求 区间[a,b]内满足p^k*q*^m(k>m)的数的个数
- CF Mike and Feet (求连续区间内长度为i的最小值)单调栈
- POJ 3264(线段树求区间内最大值和最小值)
- 求区间内的素数
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- poj 2823 线段树 求固定区间的最大最小值
- 线段树求区间最大值与最小值的差
- 求一段区间内素数的个数
- nlp(一)语种检测
- Java多线程
- SpringCloud第五篇-Hystrix Dashboard
- html5访问历史记录案列
- 底层string
- 洛谷P1440 求m区间内的最小值
- 吴恩达deeplearning.ai课程系列笔记01
- CodeForces 883I
- c++的函数
- 04-树4 是否同一棵二叉搜索树(25 point(s))
- 目前最全的机器学习知识结构图(11月1日更新)
- 编程之美--第二章问题解答
- JavaScript中apply bind call的异同(重点讲解call方法)
- Linux下创建目录、用户,并限制对应用户权限