首页 > Sliding Window
头像 是园不是圆
发表于 2020-05-30 18:28:21
原题链接:传送门 思路:这道题是滑动窗口的模板题,解决方法是用一个双端队列维护一个大小为k的窗口,然后我们让这个窗口每次移动一下,在移动的过程中维护窗口的最大值或者最小值(维护的答案就在队列的头部),重点介绍一下如何用双端队列来维护,首先为什么要用双端队列而不用一般的队列呢?因为我们要实现在队头的 展开全文
头像 马角的逆袭
发表于 2020-05-21 11:21:03
经典问题,滑动窗口的最值问题, 堆优化 结构体保存数字的下标和数字本身 struct Node { int id, val; //下标和值 bool operator < (const Node& no) const { return val < no.v 展开全文
头像 在刷题的单身狗很开心
发表于 2023-09-12 10:57:06
本题是一个滑动窗口问题,在移动过程中改变的是第一个数被丢掉和下一个数加进来。那么可以建立一个队列,如果当前进来的这个数比前面的某些数要大的话就需要出队,因为由于这个更大的数的存在前面的数就不可能变成最大的数。那么就需要直接从队列里面删除。如果第一个在窗口移动的时候被丢掉了同样也要删除。如果新加进来的 展开全文
头像 sunrise__sunrise
发表于 2020-05-29 15:06:21
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 An array of size n ≤ 106 is given to you. There is a sliding windo 展开全文
头像 ACtoYou
发表于 2024-03-29 09:06:49
/* 1. 需要维护:尾部插入,删除,头部删除,查找-->所以用deque 2. deque队列维护的是下标值,不是值 */ #include<bits/stdc++.h> using namespace std; int n,k; int a[1000010]; deque& 展开全文
头像 活泼泼
发表于 2021-04-16 22:32:22
用数组du作为单调队列,把对应a中的下标记录下来。l和r分别是数组du的左右界。以求区间最大为例,如果后来的元素更大,则前面比它小的元素就没机会成为最大了,直接去掉。若后来的元素更小,由于位序偏后,可能会成为某个区间的最大。当区间里的数多于k个,就把最前面的元素去掉。最终du对应a中的元素单调下降, 展开全文