首页 > TAG信息列表 > P1886

洛谷P1886 滑动窗口_第二次理解

洛谷P1886 滑动窗口_第二次理解 第一次做的在这 思路: 之前讲这是一个“特殊的”单调栈,但其实,头尾都能进出的东西有名字——双端队列。 对于每一个数(大于等于k),要找到他之前(包括自己)的k个数里的最值 ,那就要: 1、找到该值在之前单调双端队列中的位置 2、先将该数入队 3、再去拿队头

P1886 滑动窗口 /【模板】单调队列

单调队列 一种需要 人工 根据一定条件, 来筛除一些队列中已经没有资格再混下去的元素的数据结构 张三原本在学校的 OI 队伍, 但天天不思进取, 上课只会打小游戏, 结果...... 身为高二学长的他竟然连高一新晋的 OIer 都比不过, 于是他们学校的 yxf 老师就将他开除了队伍, 因为 新

P1886 滑动窗口

题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 例如: The array is [1 3 -1 -3 5 3 6 7], and k = 3. 输入输出格式 输入格式:   输入一共有两行,第一行为n,k。 第二行为n个

单调队列(数组优化?)P1886

class Deque{public: int a[maxn]; int pl=1,pr=0;}Deq;int a[maxn];int n,k;void solve(){ Deq.pl=1;Deq.pr=0; for(int i=1;i<=n;i++){ while(Deq.pr>=Deq.pl&&a[Deq.a[Deq.pr]]<a[i])Deq.pr--;//弹尾 Deq.a[++Deq.pr]=i;//入尾

洛谷P1886《滑动窗口》

原更新时间:2018-10-04 19:00:47 单调队列的应用 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 例如: The array is [1 3 -1 -3 5 3 6 7], and k = 3. 图片来自洛谷 # I

洛谷 P1886 滑动窗口 /【模板】单调队列

纯板子题,入队时保证单调性,即单调栈,出队保证题目条件,本题即窗口长度k,在入队出队时都可以维护信息 const int maxm = 1e6+5; int buf[maxm], maxq[maxm], minq[maxm], ans1[maxm], ans2[maxm]; int main() { ios::sync_with_stdio(false), cin.tie(0); int n, k, l1 = 0

P1886 滑动窗口

题意::::现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。   解法  1)单调队列   2)线段树(n * log n)        单调队列分析::            考虑最小值情况::                以

P1886 滑动窗口

题面 这题确实是单调队列的模板题,基本没什么太多要处理的东西,就是一个要达到m个数字再输出,那不就是加一个判断的事么。。 不多bb直接上代码了 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<queue> 7 using

洛谷P1886 滑动窗口

传送门啦 以最大值为例,既然我们想要保证队列开头为答案,那么我们就要保证每次更新使最大值一直放在队列。那么如果存储的最大值该弹出了怎么办呢?我们只需要记录下每个元素的位置,判断是否在区间内即可。 队头弹出后,第二位就变成了队头,我们就要保证这个数现在是区间内最大。那么是不是

洛谷P1886 滑动窗口

典型的RMQ问题, 无需过多的解释。 一开始想用刚学的线段树, 于是费了九牛二虎之力打了个线段树,结果 具体为毛WA, 求大佬们指点。 然后我只好默默打了个ST表。 ST表这东西嘛, 真不错,简单粗暴,比线段树好调多了,然后就 就在这时, 我突然意识到其实不用开两个数组, 重复利用一个没准也可以水过