Luogu P1886 滑动窗口 /【模板】单调队列 #include <iostream>usingnamespacestd;constintN=1000010;inta[N], q[N];intmain(){intn, k; scanf("%d%d", &n, &k);for(inti=1; i<=n; i++) scanf("%d", &a[i]);//维护窗口最小值inth=1, t=0;//头尾指针初值for(inti=1; i<=n; i++...
原因:窗口长度i - q[hh] + 1而不是tt - hh + 1【队列元素在数组不一定连续】 如果i - q[hh] + 1 > k则hh ++出队 原因:当窗口长度为1时一开始会误判导致hh始终大于tt,然后输出的值总是0
由于3以前元素都<3,所以不必再比较,6进队。因为-3此时已经在滑动窗口之外,所以-3从队首出队。此时,q={3,6},p={6,7} 出现7。队尾元素6小于7,7进队。此时,q={3,6,7},p={6,7,8}。 那么,我们对单调队列的基本操作已经分析完毕。因为单调队列中元素大小单调递*(增/减/自定义比较),因此,队首元素...
P1886 滑动窗口 /【模板】单调队列 单调队列 概念 一种需要人工根据一定条件, 来筛除一些队列中已经没有资格再混下去的元素的数据结构 举例 张三原本在学校的 OI 队伍, 但天天不思进取, 上课只会打小游戏, 结果... 身为高二学长的他竟然连高一新晋的 OIer 都比不过, 于是他们学校的 yxf 老师就将他开除了队...
输出共两行,第一行为每次窗口滑动的最小值 第二行为每次窗口滑动的最大值 输入输出样例 输入#1 8 3 1 3 -1 -3 5 3 6 7 输出#1 -1 -3 -3 -3 3 3 3 3 5 5 6 7 心路历程: 一开始觉得这个题非常简单,看到是什么单调队列的模板,我心想,啥(⊙_⊙)?单调队列?我咋没发现单调? 一开始的想法是...
滑动窗口/【模板】单调队列 https://www.luogu.com.cn/problem/P1886 前言: 个人而言,这是一道很不错的题。为什么?因为OIer们可以使用多种不做法A掉这道题(当然,方法最多的貌似还是著名的A+B系列问题??) 该篇题解通过三种做法(严格来算是两种)来讲解该题qwq ...
单调队列--P1886 滑动窗口 /【模板】单调队列 *传送 **单调队列的模板题(做很多题的前置准备) 本题我们维护一个从大到小/从小到大的单调队列即可。拿最大值来举例:对于新加进来的数,如果比队尾小我们就加进来,否则为了维护单调性我们从队尾弹出比当前值小的值。不难证明这些弹出的值不会是任何一个滑动窗口...
滑动窗口 /【模板】单调队列 题目描述 有一个长为n的序列a,以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 例如: The array is[1,3,−1,−3,5,3,6,7], andk=3。 输入格式 ...
5:插入9,队列为:(16,4),(9,5) 。。。依此类推 那么f(i)就是第i步时队列当中的首元素:8,8,12,12,16,16,。。。 例题:POJ 2823 滑动窗口 Sliding Window Description An array of sizen≤ 106is given to you. There is a sliding window of sizekwhich is moving from the very left of the ...
第一行输出,从左至右,每个位置滑动窗口中的最小值。 第二行输出,从左至右,每个位置滑动窗口中的最大值。 输入样例: 8313-1-35367 输出样例: -1-3-3-333335567 这题我们可以使用数组模拟队列来进行求解,每次对queue维护,我们对这串数从左到右遍历,想象一个长度为k的窗口在上面不断的向右滑动~ ...