POJ 2823 Sliding Window(单调队列)

单调队列与滑动窗口(Sliding window, poj2823) 单调队列,顾名思义,就是(严格)单调(递增或递减)的队列。下面以单调递减队列为例。 单调递减队列: 1.单调递减的队列,队首元素总是最大的。 2.元素只能从队尾入队,但可以从队尾或队首出队。若待入队的元素>=队尾元素,队尾元素出队,直到待入队的元素=窗口宽度,说明队首元素已不在窗内,队首元素出队。 3.单调队列有两个单调性:(1)元素的值是严格单调的,这里是严格单调递减;(2) 阅读详情
Sliding Window
Time Limit: 12000MS Memory Limit: 65536K
Total Submissions: 61914 Accepted: 17733
Case Time Limit: 5000MS

Description

An array of size  n ≤ 10 6 is given to you. There is a sliding window of size  k which is moving from the very left of the array to the very right. You can only see the  k numbers in the window. Each time the sliding window moves rightwards by one position. Following is an example: 
The array is  [1 3 -1 -3 5 3 6 7], and  k is 3.
Window positionMinimum valueMaximum value
[1  3  -1] -3  5  3  6  7 -13
 1 [3  -1  -3] 5  3  6  7 -33
 1  3 [-1  -3  5] 3  6  7 -35
 1  3  -1 [-3  5  3] 6  7 -35
 1  3  -1  -3 [5  3  6] 7 36
 1  3  -1  -3  5 [3  6  7]37

Your task is to determine the maximum and minimum values in the sliding window at each position. 

Input

The input consists of two lines. The first line contains two integers  n and  k which are the lengths of the array and the sliding window. There are  n integers in the second line. 

Output

There are two lines in the output. The first line gives the minimum values in the window at each position, from left to right, respectively. The second line gives the maximum values. 

Sample Input

8 3
1 3 -1 -3 5 3 6 7

Sample Output

-1 -3 -3 -3 3 3
3 3 5 5 6 7

Source

题意:

滑动窗口,一次只能看k个数字,求每次窗口中的最大值最小值。

POINT:

单调队列。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#include <algorithm>
using namespace std;
#define  LL long long
const int N = 1000000+10;
struct node
{
    int x,y;
}v[N];
int a[N],n,k;
int ans[N];
void getmax()
{
    int cnt=0;
    int head=1,end=0;
    for(int i=1;i<k;i++)
    {
        while(head<=end&&v[end].x<=a[i]) end--;
        v[++end].x=a[i],v[end].y=i;
    }
    for(int i=k;i<=n;i++)
    {
        while(head<=end&&v[end].x<=a[i]) end--;
        v[++end].x=a[i],v[end].y=i;
        while(i-v[head].y>=k) head++;
        ans[++cnt]=v[head].x;
    }
    for(int i=1;i<=cnt;i++)
    {
        if(i-1) printf(" ");
        printf("%d",ans[i]);
    }
    printf("\n");
}
void getmin()
{
    int cnt=0;
    int head=1,end=0;
    for(int i=1;i<k;i++)
    {
        while(head<=end&&v[end].x>=a[i]) end--;
        v[++end].x=a[i],v[end].y=i;
    }
    for(int i=k;i<=n;i++)
    {
        while(head<=end&&v[end].x>=a[i]) end--;
        v[++end].x=a[i],v[end].y=i;
        while(i-v[head].y>=k) head++;
        ans[++cnt]=v[head].x;
    }
    for(int i=1;i<=cnt;i++)
    {
        if(i-1) printf(" ");
        printf("%d",ans[i]);
    }
    printf("\n");
    
}
int main()
{
    scanf("%d %d",&n,&k);
    
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        getmin();
        getmax();
    
}





PyTorch版Unet训练后别只看loss:手把手教你计算并可视化多类别语义分割的mIoU(附完整代码) 本文详细介绍了在PyTorch中使用Unet模型进行多类别语义分割后,如何计算和可视化mIoU(mean Intersection over Union)以全面评估模型性能。通过完整的代码示例和实用技巧,帮助开发者从loss优化转向更精准的区域分割评估,特别适用于医学图像分析等关键场景。 阅读详情

相关推荐

Win10自动更新怎么永久关闭?有效的Win10强制更新关闭方法

之前小编为大家分享过一些Win10彻底关闭Windows Update自动更新的方法,主要是通过一些如设置流量计费或借助一些专门的小工具来实现,但往往会发现,Win10自动更新就像打不死的小强,不管怎么关闭,之后还是会自动更新,让不少小伙伴颇为不爽。今天小编带来了这篇改进型教程,通过全方位设置,彻底关闭Win10自动更新,感兴趣的小伙伴不妨试试吧。 ...

jianai0602的博客 108万+

poj 2823 Sliding Window 单调队列(裸题)

单调队列,名叫队列,但与队列不太相同,入队同样从队尾进,但出队可以从队头弹出,也可以在队尾删去 一般有单调递增队列和单调递减队列 这里以单调递增队列为例 1.入队:把该入队的元素a与队尾元素比较,如果队尾元素大于a,则减小尾指针,将该元素删去,重复该步骤,直到队列为空或是队尾元素小于a,再把a入队 2.出队:分从队头弹出和队尾删去,队尾删去即为入队时会涉及的操作。当队列长度一定时,若队列长...

喵喵喵 281

CentOS 7下glibc升级到2.28的保姆级避坑指南(含GCC 7.3.1编译配置)

本文详细介绍了在CentOS 7系统中将glibc升级到2.28版本的完整流程,包括GCC 7.3.1的编译配置、环境变量设置、glibc编译的细节处理以及生产环境验证。文章特别强调了风险控制和避坑技巧,适用于需要提升系统兼容性的企业级用户。

weixin_29611239的博客 407

Sliding Window POJ - 2823 (单调队列)

题目链接 这道题是一道非常经典的单调队列题目. 单调队列是一种单调递增或单调递减的队列结构, 在C++STL中有priority_queue来实现了, 但较为麻烦只能对队尾进行操作和访问, 同时考虑到可能存在超时的因素, 所以在平常做题中我们一般都会选择自己来实现单调队列. 对于求类似区间最大/最小的问题, 单调队列是最佳选择, 因为它可以在常数复杂度下实现该过程. 即使是对于1.2.3.4.5...

Suprit's blog 858

华为擎云W515 PGUV-WBY0安装银河麒麟V10全流程解析

本文详细解析了华为擎云W515 PGUV-WBY0安装银河麒麟V10系统的全流程,包括准备工作、镜像下载与校验、启动盘制作、BIOS设置、安装过程关键选择、系统初始化及常见问题排查。特别针对ARM架构设备提供了实用技巧,帮助用户顺利完成国产化系统的部署与优化。

weixin_28725949的博客 695

ET篇:Google.Protobuf的学习(理解基本的使用流程)

据我目前所知,ET使用的数据交换协议是Google.Protobuf,所以今天就来学习一下,但是网上许多人都是以高下立判的方式讲解的,对新手小白很不友好,所以我今天就以纯小白的视角和大家一起学习 学习环境: .NET Core2.2 .NET Framework 4.7.2 Rider protobuf-csharp-3.7.0-rc-2 Google.Protobuf简介 prot...

设计师养成记 3563

Sliding Window POJ - 2823 (优先队列 或者 滚动rmq 或者 单调栈 )

An array of size n ≤ 10 6 is given to you. There is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each tim...

dsaghjkye的博客 445

10.2 在新能源、储能及电网节点的应用实践

构网型变流器技术在电力系统中的应用进展 构网型变流器技术正从理论研究走向规模化工程应用,为新能源并网提供主动支撑能力。该技术在光伏电站采用"部分构网"混合架构,由构网单元实现黑启动和弱网稳定;在风电场利用叶轮动能提供惯量响应。储能系统是理想的构网载体,可提供快速调频和动态电压支撑。在电网节点,构网型STATCOM可增强弱电网电压稳定性,大容量变流器可替代传统调相机。当前面临标准滞后、宽频振荡风险等共性挑战,需在可靠性、经济性间取得平衡。系统级协调控制和精确阻抗建模是应用成功的关键。

技术工作者 1109

[单调队列] poj 2823 Sliding Window

题意: 给你n个数和一个k 把n分成连续的n-k+1个区间 第一行按顺序输出每个区间的最小值,第二行是最大值。 思路: 单调队列的模板题,这里注意的是插入队尾的时候需要二分加速 代码: #include"stdio.h" #include"algorithm" #include"string.h" #include"iostream" #include"queue" #include

Enmity_Dark 709

[deprecated]第四章:TTM分析: 4.2.1 存储分配ttm_bo_validate功能实现分析

ttm_bo_validate是TTM框架中负责验证和调整BufferObject物理内存分配的核心函数,主要用于显存管理。该函数通过placement参数判断BO是否需要迁移或重新分配资源,完成内存分配、迁移及缓存策略调整等操作。实现流程包括资源释放、兼容性检查、迁移保护、新资源分配、迁移实现等步骤,支持多跳迁移和临时缓冲区。典型应用于显存溢出迁移、缓存策略调整、驱动初始化等场景,确保BO始终处于预期状态。

图形/计算GPU的驱动与虚拟化技术分享园地 836

姿态传感器/陀螺仪之SC7A20HTR是应用驱动程序设计

define SC7A20_CTRL1_PM_100HZ (0x5 << 4) // 正常模式,100Hz输出数据速率(ODR)// 用于存储6字节的原始数据(X_L, X_H, Y_L, Y_H, Z_L, Z_H)#define SC7A20_WHO_AM_I_VALUE 0x11 // 读取WHO_AM_I寄存器应该返回的值。// 但HAL_I2C_Mem_Read按顺序读,data[0]是X_L(低8位),data[1]是X_H(高8位)MX_I2C1_Init();

corlin6688的博客 756

POJ 2823 Sliding Window(单调队列)

题意  长度为n的数组上有个长度为k的滑窗从左向右移动  求每次移动后滑窗区间的最小值和最大值  输出两行  第一行所有最小值  第二行所有最大值 可以用线段树来做  但是单调队列更简单  单调递增队列: 队尾单调入队(入队元素大于队尾元素时直接入队  否则队尾出队直到队尾元素小于入队元素或者队列为空)  队首队尾都可以出队 求最小值时 先判断队首元素是否在滑窗之内  不在队首就出队  然后

Deng's site \# 2787

基于OpenClaw的自动化文件管理与文档分类系统设计与实现

本文介绍了一种基于OpenClaw的自动化文件管理与文档分类系统。系统采用三层架构设计,包含数据层、逻辑层和应用层,核心组件涵盖文件扫描、处理、分类、移动等功能。技术选型上使用Python/FastAPI作为后端,结合PostgreSQL/Elasticsearch/MinIO存储方案,并整合scikit-learn/PyTorch等AI技术实现智能分类。系统实现了文件递归扫描、增量扫描、元数据提取等功能,通过文件哈希和修改时间检测变化。该方案能有效提升文件管理效率,实现文档的自动化分类与智能管理。

一键难忘的博客 753

POJ2823 Sliding Window 单调队列

题目链接 http://poj.org/problem?id=2823 分析 单调队列模板,在从队尾出队时,可以用二分快速找到最终位置,但效果并不明显。 AC代码 #include <cstdio> inline int read() { int num = 0, flag = 1; char c = getchar(); while (c < '0' || c >...

Kevin的博客 255

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

poj2823 Sliding Window(单调队列)

题意: 给定一个长度为 NNN 的数字序列,要求你求出每个长度为 KKK 的区间内的最小值与最大值。 单调队列做法: const int N = 1e6 + 10; const int mod = 998244353; int a[N], maxx[N], minn[N], queue1[N], queue2[N];//queue存位置 int i, n, k, front1, front2, tail1, tail2, cnt; int main() { sdd(n, k); cn..

邵光亮的博客 14万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

POJ - 2823 Sliding Window(单调队列)

题目链接:https://vjudge.net/problem/POJ-2823 题意:给定一个数列,从左至右输出每个长度为k的数列段内的最小数和最大数。 思路:单调队列维护两端,它的头端可以出数,尾部可以进数,通常用于解决局部性的最值问题。单调栈只维护一端,通常维护全局的单调性。单调栈大小没有上限,而单调队列通常有大小限制。所以本题选择用单调队列解。 代码中数组的解释: 数组用来表示一个单调队列 数组表示单调队列里每个元素在原数组中的下标 本题只需维护两个队列(单调递减队列,头部肯定是最大值,.

sugarbliss 440

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

POJ 2823 Sliding Window 单调队列

解题思路: 维护一个递增的单调队列和一个递减的单调队列,基础题。 代码: #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define FOR(i,x,y) for(int i=

蘑菇--走在通往梦想的道路上。 852

[POJ2823]Sliding Window(单调队列)

[POJ2823]Sliding Window(单调队列)-ZGX

私は Mocha!! 692

ACM-单调队列之Sliding Window——poj2823

ACM 单调队列 Sliding Window poj2823 单调队列详解

继续激情,继续奋斗。 2507

单调队列 Sliding Window POJ - 2823

单调队列在求滑动窗口的时候用 例:给出一个长度为n的序列A,求A中所有长度为m的连续子序列的最大值 解法就是 用一个双端队列 始终保持队列中的元素的个数为m 求最大值就单调递减队列 从头开始遍历每个位置 那么队头即为每个子序列的最大值 例题: Sliding Window POJ - 2823 这个求最大和最小值 用两个双端队列 切记 能一个循环完事...

weixin_30697239的博客 90

【单调队列】poj2823_Sliding Window

题目链接 http://poj.org/problem?id=2823 【题解】 这个题目就是纯模板题,但是这个题目有很多坑点,首先这个题目是多组输入的,然后这个输出还卡我们时间 #include<stdio.h> #include<iostream> using namespace std; const int N = 1e6+10; int IM[N],Im[...

Z_sea的博客 263

poj2823Sliding Window——单调队列

题目:http://poj.org/problem?id=2823 单调队列模板。 代码如下: #include<iostream> #include<cstdio> using namespace std; int n,k,a[1000005],mx[1000005],mn[1000005]; int main() { scanf("%d...

aodan5477的博客 117

POJ 2823 Sliding Window (单调队列)

/* poj 2823 8012K 5344MS */ #include #include #define MAXN 1000005 #define MAX_INT 2147483647 using namespace std; int que_min[MAXN][2],que_max[MAXN][2],ans_min[MAXN],ans_max[MAXN]; //que二维数组,[]

公孙轩辕,一眼千年 384

POJ 2823 Sliding Window 滑动窗口 单调队列优化

题目链接:http://poj.org/problem?id=2823 灵感来源:单调队列初步 为什么说是灵感来源呢,看了紫书上的代码,知道了单调队列的意思,而且有两种解法,一种是用C++的set,复杂度是O((N-k) log k),然后百度到了此题,为了方便用来set,然后果断TLE。就试着写单调队列,可是却写不出来。。百度到这篇博客后,第一次随便过了一遍,没怎么看懂。没看了。今天再次百度

catch_catch的专栏 1395

poj2823 Sliding Window 单调队列

题目 An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each t...

戒毒戒赌戒网瘾,学习学问学做人——好好学习 288

[POJ 2823]Sliding Window[单调队列]

题目链接:[POJ 2823]Sliding Window[单调队列] 题意分析: 包含n个数字的数列,用一个长度为k的窗口移动从1开始向右移动,每次输出窗口中的最小值和最大值。分两行输出结果:最小值输出到上行,最大值输出到下行。 解题思路: 考虑每次移动窗口要进行的操作,总共有两种,增加一个数,删去一个数。考虑到需要涉及到删除操作,我们使用单调队列来进行维护。 L代表队列的左端,R代表

闲停 571
上一篇: HDU 1757 A Simple Math Problem(构造矩阵)
下一篇: POJ 2796 Feel Good(单调栈)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值