商业网站平台,做网站费用 会计分录,做网站图片切图可以用中文吗,商业空间设计的概念csp信奥赛C标准模板库STL案例应用16 deque实践
题目描述
有一个长为 nnn 的序列 aaa#xff0c;以及一个大小为 kkk 的窗口。现在这个窗口从左边开始向右滑动#xff0c;每次滑动一个单位#xff0c;求出每次滑动后窗口中的最小值和最大值。
例如#xff0c;对于序列 [1…csp信奥赛C标准模板库STL案例应用16deque实践题目描述有一个长为n nn的序列a aa以及一个大小为k kk的窗口。现在这个窗口从左边开始向右滑动每次滑动一个单位求出每次滑动后窗口中的最小值和最大值。例如对于序列[ 1 , 3 , − 1 , − 3 , 5 , 3 , 6 , 7 ] [1,3,-1,-3,5,3,6,7][1,3,−1,−3,5,3,6,7]以及k 3 k 3k3有如下过程窗口位置 最小值 最大值 [1 3 -1] -3 5 3 6 7 − 1 3 1 [3 -1 -3] 5 3 6 7 − 3 3 1 3 [-1 -3 5] 3 6 7 − 3 5 1 3 -1 [-3 5 3] 6 7 − 3 5 1 3 -1 -3 [5 3 6] 7 3 6 1 3 -1 -3 5 [3 6 7] 3 7 \def\arraystretch{1.2} \begin{array}{|c|c|c|}\hline \textsf{窗口位置} \textsf{最小值} \textsf{最大值} \\ \hline \verb![1 3 -1] -3 5 3 6 7 ! -1 3 \\ \hline \verb! 1 [3 -1 -3] 5 3 6 7 ! -3 3 \\ \hline \verb! 1 3 [-1 -3 5] 3 6 7 ! -3 5 \\ \hline \verb! 1 3 -1 [-3 5 3] 6 7 ! -3 5 \\ \hline \verb! 1 3 -1 -3 [5 3 6] 7 ! 3 6 \\ \hline \verb! 1 3 -1 -3 5 [3 6 7]! 3 7 \\ \hline \end{array}窗口位置[1 3 -1] -3 5 3 6 71 [3 -1 -3] 5 3 6 71 3 [-1 -3 5] 3 6 71 3 -1 [-3 5 3] 6 71 3 -1 -3 [5 3 6] 71 3 -1 -3 5 [3 6 7]最小值−1−3−3−333最大值335567输入格式输入一共有两行第一行有两个正整数n , k n,kn,k第二行有n nn个整数表示序列a aa。输出格式输出共两行第一行为每次窗口滑动的最小值第二行为每次窗口滑动的最大值。输入输出样例 1输入 18 3 1 3 -1 -3 5 3 6 7输出 1-1 -3 -3 -3 3 3 3 3 5 5 6 7说明/提示【数据范围】对于50 % 50\%50%的数据1 ≤ n ≤ 1 0 5 1 \le n \le 10^51≤n≤105对于100 % 100\%100%的数据1 ≤ k ≤ n ≤ 1 0 6 1\le k \le n \le 10^61≤k≤n≤106a i ∈ [ − 2 31 , 2 31 ) a_i \in [-2^{31},2^{31})ai∈[−231,231)。思路分析核心思想单调队列单调队列是一种数据结构能在 O(1) 时间内获取队列中的最值同时维护队列的单调性。算法流程求最小值维护单调递增队列队列中存储元素的索引而不是值本身维护队列使得队首到队尾对应的值单调递增每次滑动窗口移除队首超出窗口范围的元素从队尾移除比当前元素大的元素保持单调性将当前元素索引加入队尾当窗口形成时输出队首对应的值求最大值维护单调递减队列与最小值类似但维护队首到队尾对应的值单调递减从队尾移除比当前元素小的元素时间复杂度O(n)每个元素最多入队出队一次因此总时间复杂度为 O(n)。代码实现#includebits/stdc.husingnamespacestd;constintMAXN1e65;inta[MAXN];intmain(){intn,k;cinnk;for(inti0;in;i){cina[i];}dequeintdq;// 双端队列存储元素索引// ---------- 求最小值 ----------for(inti0;in;i){// 移除队首超出窗口范围的元素// 如果队首索引小于等于 i-k说明该元素已不在当前窗口中while(!dq.empty()dq.front()i-k){dq.pop_front();}// 维护单调递增队列从队首到队尾a[索引]递增// 从队尾开始移除所有大于等于当前元素 a[i] 的索引// 因为这些元素不可能成为后续窗口的最小值有更小的 a[i]while(!dq.empty()a[dq.back()]a[i]){dq.pop_back();}// 将当前索引加入队尾dq.push_back(i);// 当窗口完全进入数组后开始输出已经处理了至少 k 个元素// 此时队首元素就是当前窗口的最小值if(ik-1){couta[dq.front()] ;}}coutendl;// 清空队列准备求最大值dq.clear();// ---------- 求最大值 ----------for(inti0;in;i){// 同样先移除超出窗口的元素while(!dq.empty()dq.front()i-k){dq.pop_front();}// 维护单调递减队列从队首到队尾a[索引]递减// 从队尾开始移除所有小于等于当前元素 a[i] 的索引// 因为这些元素不可能成为后续窗口的最大值有更大的 a[i]while(!dq.empty()a[dq.back()]a[i]){dq.pop_back();}dq.push_back(i);// 输出当前窗口的最大值if(ik-1){couta[dq.front()] ;}}coutendl;return0;}功能分析数据结构选择deque双端队列能在两端进行插入删除操作符合单调队列需求存储索引而非值便于判断元素是否在窗口内也方便获取对应值两个关键维护操作窗口范围维护while(!dq.empty()dq.front()i-k){dq.pop_front();}确保队列中所有元素都在当前窗口内只需检查队首因为队列是按时间顺序加入的单调性维护最小值移除队尾所有 ≥ a[i] 的元素最大值移除队尾所有 ≤ a[i] 的元素保证队列的单调性质队首就是当前窗口的最值输出时机当i k-1时窗口完全进入数组可以输出结果。此时共有n-k1个窗口。算法优势高效每个元素最多入队出队一次O(n) 时间复杂度空间优化只需 O(k) 的额外空间通用性强模板化代码适用于各种滑动窗口最值问题示例分析以输入[1,3,-1,-3,5,3,6,7]k3为例最小值队列变化i0(1): 队列[0] → 无输出i1(3): 队列[0,1] → 无输出i2(-1): 移除1队列[0,2] → 输出 a[2]-1i3(-3): 移除2队列[3] → 输出 a[3]-3i4(5): 队列[3,4] → 输出 a[3]-3i5(3): 移除4队列[3,5] → 输出 a[3]-3i6(6): 移除3队列[5,6] → 输出 a[5]3i7(7): 队列[5,6,7] → 输出 a[5]3完整系列资料请查看专栏《csp信奥赛C标准模板库STL》https://blog.csdn.net/weixin_66461496/category_13108077.html各种学习资料助力大家一站式学习和提升#includebits/stdc.husingnamespacestd;intmain(){cout########## 一站式掌握信奥赛知识! ##########;cout############# 冲刺信奥赛拿奖! #############;cout###### 课程购买后永久学习不受限制! ######;return0;}一、CSP信奥赛C通关学习视频课C语法基础C语法进阶C算法C数据结构CSP信奥赛数学CSP信奥赛STL二、CSP信奥赛C竞赛拿奖视频课信奥赛csp-j初赛高频考点解析CSP信奥赛C复赛集训课12大高频考点专题集训三、考级、竞赛刷题题单及题解GESP C考级真题题解CSP信奥赛C初赛及复赛高频考点真题解析CSP信奥赛C一等奖通关刷题题单及题解详细内容1、csp/信奥赛C完整信奥赛系列课程永久学习https://edu.csdn.net/lecturer/7901 点击跳转2、CSP信奥赛C竞赛拿奖视频课https://edu.csdn.net/course/detail/40437 点击跳转3、csp信奥赛冲刺一等奖有效刷题题解CSP信奥赛C初赛及复赛高频考点真题解析持续更新https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转2025 csp-j 复赛真题及答案解析最新更新2025 csp-x(山东) 复赛真题及答案解析最新更新2025 csp-x(河南) 复赛真题及答案解析最新更新2025 csp-x(辽宁) 复赛真题及答案解析最新更新2025 csp-x(江西) 复赛真题及答案解析最新更新2025 csp-x(广西) 复赛真题及答案解析最新更新2020 ~ 2024 csp 复赛真题题单及题解2019 ~ 2022 csp-j 初赛高频考点真题分类解析2021 ~ 2024 csp-s 初赛高频考点解析2023 ~ 2024 csp-x (山东)初赛真题及答案解析2024 csp-j 初赛真题及答案解析2025 csp-j 初赛真题及答案解析最新更新2025 csp-s 初赛真题及答案解析最新更新2025 csp-x (山东)初赛真题及答案解析(最新更新)2025 csp-x (江西)初赛真题及答案解析(最新更新)2025 csp-x (辽宁)初赛真题及答案解析(最新更新)CSP信奥赛C一等奖通关刷题题单及题解持续更新https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转129 道刷题练习和详细题解涉及模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图4、GESP C考级真题题解GESP(C 一级二级三级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转GESP(C 四级五级六级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转· 文末祝福 ·#includebits/stdc.husingnamespacestd;intmain(){cout跟着王老师一起学习信奥赛C;cout 成就更好的自己 ;cout csp信奥赛一等奖属于你! ;return0;}