【洛谷P1886】滑动窗口——单调队列
没想到啊没想到,时隔两个月,我单调队列又懵了……
调了一个小时,最后错在快读,啊!!!!(不过洛谷讨论真好啊,感谢大佬!)
考前就不推新东西了,好好写写那些学过的东西
题目点这里(我就不粘了自己点一下看吧)
这题还有其他奇奇怪怪的做法,比如你可以当做RMQ,用线段树啊ST表啊随便你,不过单调队列就可以了
单调队列说到底就是个数据结构,就是维护数据的。
以当前这道题为例:
它维护的队列一定满足单调性,单调递增或递减,或者自定义一个单调性。
如何维护呢,假设当前队尾为q [ tail ], 要插入元素为 a [ i ]
- 若直接插入 a [ i ] 满足其单调性,就直接插入
- 若不满足,就删掉 q [ tail ] ( tail - - ) ,因为能取到 q [ tail ] 就一定能取到 a [ i ] , 而a [ i ] 更优
这题既然要求最大值和最小值,就求两遍嘛!
下面是代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,k,a[],q[],p[],head,tail;
inline int read()
{
int x=;
char c=getchar();
int flag=;
while (c>''||c<'')
{
if (c=='-')
flag*=-;
c=getchar();
} //就是这里!!!!记住它!!!
while (c<=''&&c>='') x=x*+c-,c=getchar();
x*=flag;
return x;
}//这个坑死我的快读啊!!!!!!考前一定要多打几遍
int main()
{
n=read(); k=read();
for (int i=; i<=n; i++)
a[i]=read();
// 求 min
head=; tail=;
for (int i=; i<=n; i++)
{
while (head<=tail&&q[tail]>=a[i])
tail--;
//首先保证不要删过,head<=tail(tail可以等于head)
//求最小那么单调性就是单调递增
q[++tail]=a[i];
p[tail]=i;//插入队列
while (p[head]<=i-k) head++;//更新队头,使最值在区间内
if (i>=k) cout<<q[head]<<" ";//k往后每一个i都对应一个窗口,输出队头存储的最值即可
}
cout<<endl;
head=,tail=;
// 求 max ,类比求 min
for (int i=; i<=n; i++)
{
while (head<=tail&&q[tail]<=a[i])
tail--;
//最大值就是单调递增
q[++tail]=a[i];
p[tail]=i;
while (p[head]<=i-k) head++;
if (i>=k) cout<<q[head]<<" ";
}
return ;//快考试啦不要抄答案!!!(给我自己
}
就是这些,CSP快到啦,RP++!!
惯例
ありがとうございます
【洛谷P1886】滑动窗口——单调队列的更多相关文章
- 洛谷 P1886 滑动窗口(单调队列)
题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...
- [洛谷P1886]滑动窗口 (单调队列)(线段树)
---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- 洛谷 P1886 滑动窗口(单调队列)
嗯... 题目链接:https://www.luogu.org/problem/P1886 首先这道题很典型,是标准的单调队列的模板题(也有人说单调队列只能解决这一个问题).这道题可以手写一个队列,也 ...
- 洛谷 P1886 滑动窗口
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- [Luogu P1886]滑动窗口--单调队列入门
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- 洛谷 P1886 滑动窗口 (数据与其他网站不同。。)
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- 洛谷——P1886 滑动窗口|| POJ——T2823 Sliding Window
https://www.luogu.org/problem/show?pid=1886#sub || http://poj.org/problem?id=2823 题目描述 现在有一堆数字共N个数字( ...
- 洛谷P1886--滑动窗口(单调队列模板)
https://www.luogu.org/problemnew/show/P1886 单调队列的操作上比普通队列多了可以从尾端出队 单调队列保持队内元素单调递增/递减,以保证队首元素为最小/最大元素 ...
- [POJ2823][洛谷P1886]滑动窗口 Sliding Window
题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数. 解题思路:这道题是一道区间查询问题,可以用线段树做.每个 ...
随机推荐
- HEOI2016/TJOI2016 字符串问题
题目链接:戳我 非常不好意思,因为想要排版,所以今天先只把代码贴出来,明天补题解. 40pts暴力:直接暴力匹配 #include<iostream> #include<cstrin ...
- jQuery_插入操作
jQuery的插入方法有很多,有内部插入,也有外部插入,每个插入方式里面还有很多种,本文一一介绍,注释在代码里,直接上代码: 代码: <!DOCTYPE html> <html> ...
- latex参考文献中作者名字含有特殊字符怎么办
- vue跳转到指定位置
document.querySelector(id).scrollIntoView(true)//跳转到顶部 window.scrollTo(0, 0)
- MySort(选做)的实现
MySort(选做)的实现 题目内容 注意:研究sort的其他功能,要能改的动代码,需要答辩 模拟实现Linux下Sort -t : -k 2的功能. 要有伪代码,产品代码,测试代码(注意测试用例的设 ...
- Removing jQuery from GitHub.com frontend
Removing jQuery from GitHub.com frontend Web standards in the later years Over the years, GitHub gre ...
- SecureCRT For Mac安装、破解、使用详细总结
转:https://blog.csdn.net/so_geili/article/details/83315852#_4 https://www.sednax.com/download.php
- 运算 Kotlin(3)
运算Kotlin支持数字运算的标准集,运算被定义为相应的类成员(但编译器会将函数调用优化为相应的指令) . 参见运算符重载.对于位运算,没有特殊字符来表示,而只可用中缀方式调用命名函数,例如:val ...
- 兼容ie9以下支持媒体查询和html5
<head> <!-- 让IE8/9支持媒体查询,从而兼容栅格 --> <!--[if lt IE 9]> <script src="https:/ ...
- 可以展开和收起的的LinearLayout
package com.loaderman.expandablelinearlayout; import android.animation.ObjectAnimator; import androi ...