2026/1/29 15:37:49
网站建设
项目流程
上海建设网站公,郑州网站建设代理商,网站建设利润越来越低,某网站seo诊断分析和优化方案本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来#xff0c;并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构#xff0c;旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大…本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P1886 【模板】单调队列 / 滑动窗口 - 洛谷【题目描述】有一个长为 n 的序列 a以及一个大小为 k 的窗口。现在这个从左边开始向右滑动每次滑动一个单位求出每次滑动后窗口中的最大值和最小值。例如对于序列 [1,3,−1,−3,5,3,6,7] 以及 k3有如下过程【输入】输入一共有两行第一行有两个正整数 n,k。 第二行 n 个整数表示序列 a【输出】输出共两行第一行为每次窗口滑动的最小值第二行为每次窗口滑动的最大值【输入样例】8 3 1 3 -1 -3 5 3 6 7【输出样例】-1 -3 -3 -3 3 3 3 3 5 5 6 7【算法标签】《洛谷 P1886 单调队列》 #模拟# #线段树# #单调队列# #队列#【代码详解】#includebits/stdc.husingnamespacestd;constintN1000006;inta[N],q[N];// a: 输入数组, q: 单调队列存储下标intn,k;// n: 数组长度, k: 滑动窗口大小intmain(){cinnk;// 读入n和k// 读入数组for(inti1;in;i)cina[i];// 第一部分维护窗口最小值inth1,t0;// h: 队头指针, t: 队尾指针, 初始队列为空for(inti1;in;i){// 维护队列单调递增// 当队列非空且队尾对应的值 当前值时弹出队尾while(hta[q[t]]a[i])t--;// 将当前下标加入队尾q[t]i;// 如果队头元素已经不在当前窗口内弹出队头if(q[h]i-k1)h;// 当窗口形成时i k输出当前窗口的最小值if(ik)couta[q[h]] ;}coutendl;// 第二部分维护窗口最大值h1,t0;// 重置队列for(inti1;in;i){// 维护队列单调递减// 当队列非空且队尾对应的值 当前值时弹出队尾while(hta[q[t]]a[i])t--;// 将当前下标加入队尾q[t]i;// 如果队头元素已经不在当前窗口内弹出队头if(q[h]i-k1)h;// 当窗口形成时i k输出当前窗口的最大值if(ik)couta[q[h]] ;}coutendl;return0;}// 使用acwing模板二刷#includebits/stdc.husingnamespacestd;constintN1000005;intn,k,a[N],q[N];// a: 输入数组, q: 单调队列(存储下标)intmain(){cinnk;// 读入数组长度和窗口大小// 读入数组元素for(inti1;in;i)cina[i];// 第一部分求滑动窗口最小值inthh0,tt-1;// 队列初始化: hh-队头, tt-队尾, 空队列时hhttfor(inti1;in;i){// 1. 维护窗口范围: 如果队头元素不在窗口内弹出队头if(hhttq[hh]i-k1)hh;// 2. 维护队列单调性: 保持队列单调递增while(hhtta[q[tt]]a[i])tt--;// 3. 当前下标入队q[tt]i;// 4. 当窗口形成时输出当前窗口最小值(队头元素)if(ik)couta[q[hh]] ;}coutendl;// 第二部分求滑动窗口最大值hh0,tt-1;// 重置队列for(inti1;in;i){// 1. 维护窗口范围if(hhttq[hh]i-k1)hh;// 2. 维护队列单调性: 保持队列单调递减(求最大值)while(hhtta[q[tt]]a[i])tt--;// 3. 当前下标入队q[tt]i;// 4. 当窗口形成时输出当前窗口最大值(队头元素)if(ik)couta[q[hh]] ;}coutendl;return0;}【运行结果】8 3 1 3 -1 -3 5 3 6 7 -1 -3 -3 -3 3 3 3 3 5 5 6 7