2024蓝桥杯每日一题(单调队列)

备战2024年蓝桥杯 -- 每日一题
Python大学A组

        试题一:单调栈
        试题二:滑动窗口
        试题三:子矩阵
        试题四:最大子序和


试题一:单调栈

【题目描述】

        给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1−1。

【输入格式】

        第一行包含整数 N,表示数列长度。

        第二行包含 N 个整数,表示整数数列。

【输出格式】

        共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。

【数据范围】

        1≤N≤105
        1≤数列中元素≤109

【输入样例】

5
3 4 2 7 5

【输出样例】

-1 3 -1 2 2

【解题思路】

        模板题

【Python程序代码】

from collections import *
n = int(input())
a = list(map(int,input().split()))
q,idx = [0]*(n+5),-1
for i in range(n):if idx>=0:while idx>=0 and q[idx]>=a[i]:idx-=1if idx<0:print(-1,end=' ')else:print(q[idx],end=' ')else:print(-1,end=' ')idx += 1q[idx] = a[i]

试题二:滑动窗口

【题目描述】

        给定一个大小为 n≤106 的数组。有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 k个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为 [1 3 -1 -3 5 3 6 7],k 为 3。

        你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。 

【输入格式】

        输入包含两行。

        第一行包含两个整数 n 和 k,分别代表数组长度和滑动窗口的长度。

        第二行有 n个整数,代表数组的具体数值。

        同行数据之间用空格隔开。

【输出格式】

        输出包含两个。

        第一行输出,从左至右,每个位置滑动窗口中的最小值。

        第二行输出,从左至右,每个位置滑动窗口中的最大值。

【输入样例】

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

【输出样例】

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

【解题思路】

        单调队列模板题

【Python程序代码】

from collections import *
n,k = map(int,input().split())
a = [0] + list(map(int,input().split()))
q = deque()
for i in range(1,n+1):if len(q) and q[0]<i-k+1:q.popleft()while q and a[i]<a[q[-1]]:q.pop()q.append(i)if i>=k-1:print(a[q[0]],end=' ')
print()
q = deque()
for i in range(1,n+1):if len(q) and q[0]<i-k+1:q.popleft()while q and a[i]>a[q[-1]]:q.pop()q.append(i)if i>=k-1:print(a[q[0]],end=' ')

试题三:子矩阵

【题目描述】

        给定一个 n×m(n 行 m列)的矩阵。设一个矩阵的价值为其所有数中的最大值和最小值的乘积。求给定矩阵的所有大小为 a×b (a 行 b 列)的子矩阵的价值的和。答案可能很大,你只需要输出答案对 998244353 取模后的结果。

【输入格式】

        输入的第一行包含四个整数分别表示 n,m,a,b相邻整数之间使用一个空格分隔。

        接下来 n 行每行包含 m 个整数,相邻整数之间使用一个空格分隔,表示矩阵中的每个数 Ai,j。

【输出格式】

        输出一行包含一个整数表示答案。

【数据范围】

        对于 40%40% 的评测用例,1≤n,m≤100;
        对于 70%70% 的评测用例,1≤n,m≤500;
        对于所有评测用例,1≤a≤n≤1000,1≤b≤m≤1000,1≤Ai,j≤109。

【输入样例】

2 3 1 2
1 2 3
4 5 6

【输出样例】

58

【解题思路】

        对行和列分别用单调队列

【Python程序代码】

from collections import *
n,m,a,b = map(int,input().split())
mp,p = [],998244353
for i in range(n):mp.append(list(map(int,input().split())))
max_arr = [[] for _ in range(n)]
min_arr = [[] for _ in range(n)]
# 对行变换
for i in range(n):q = deque()num = mp[i]for j in range(m):if q and q[0]<j-b+1:q.popleft()while q and num[q[-1]]<num[j]:q.pop()q.append(j)if j>=b-1:max_arr[i].append(num[q[0]])q = deque()num = mp[i]for j in range(m):if q and q[0]<j-b+1:q.popleft()while q and num[q[-1]]>num[j]:q.pop()q.append(j)if j>=b-1:min_arr[i].append(num[q[0]])
max_fin,min_fin = [[] for _ in range(n)],[[] for _ in range(n)]
for i in range(len(max_arr[0])):q = deque()for j in range(len(max_arr)):if q and q[0]<j-a+1:q.popleft()while q and max_arr[q[-1]][i]<max_arr[j][i]: q.pop()q.append(j)if j>=a-1:max_fin[j].append(max_arr[q[0]][i])q = deque()for j in range(len(max_arr)):if q and q[0] < j - a + 1: q.popleft()while q and min_arr[q[-1]][i] > min_arr[j][i]: q.pop()q.append(j)if j >= a - 1: min_fin[j].append(min_arr[q[0]][i])
res = 0
for i in range(len(max_fin)):for j in range(len(min_fin[i])):res = (res + max_fin[i][j] * min_fin[i][j])%p
print(res)

试题四:最大子序和

【题目描述】

        输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。

        注意: 子序列的长度至少是 11。

【输入格式】

        第一行输入两个整数 n,m。

        第二行输入 n 个数,代表长度为 n 的整数序列。

        同一行数之间用空格隔开。

【输出格式】

        输出一个整数,代表该序列的最大子序和。

【数据范围】

        1≤n,m≤300000,
        保证所有输入和最终结果都在 int 范围内。

【输入样例】

6 4
1 -3 5 1 -2 3

【输出样例】

7

【解题思路】

        单调队列用一下,首先初始ans应该是数组中最大的一个,其他的情况可以用前缀和+单调队列。

【Python程序代码】

from collections import *
n,m = map(int,input().split())
a = [0] + list(map(int,input().split()))
res = max(a[1:])
for i in range(1,n+1):a[i]+=a[i-1]
q = deque()
q.append(0)
for i in range(1,n):if q and i-q[0]+1>m:q.popleft()while q and a[i]<a[q[-1]]:q.pop()q.append(i)if i>1:res = max([res,a[i+1]-a[q[0]]])
print(res)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jvm提供的远程调试 简单使用

JVM自带远程调试功能 JVM远程调试&#xff0c;其实是两个虚拟机之间&#xff0c;通过socket通信&#xff0c;达到远程调试的目的&#xff1b; 前提 确保本地和远程的网络是开通的&#xff1b; 本地操作 远程操作 在启动命令参数中 把上面的内容复制进去

【3GPP】【核心网】【4G】4G手机接入过程,手机附着过程(超详细)

1. 4G手机接入过程&#xff0c;手机附着过程 附着&#xff08;Attach&#xff09;&#xff1a; 终端在PLMN中注册&#xff0c;从而建立自己的档案&#xff0c;即终端上下文 进行附着的三种情况&#xff1a; ①终端开机后的附着&#xff0c;初始附着 ②终端从覆盖盲区返回到…

解决用POI库生成的word文件中的表格在python-docx无法解析的问题

问题背景 用apache-poi生成word文件中表格&#xff0c;在使用python-docx库解析时报错&#xff1a; 问题分析 1. word文档本质上是一个rar压缩包&#xff0c;用winrar解析后如下&#xff1a; 2. 查看document.xml&#xff0c;可以看到table元素下面是没有<w:tblGrid>这…

Vue3快速上手(十七)Vue3之状态管理Pinia

一、简介 Pinia官网:https://pinia.vuejs.org/zh/ 从官网截图里可以直接看到,pinia是一个vuejs的状态(数据)管理工具。功能性同vuex。logo是小菠萝。它是一个集中式状态管理工具。就是将多个组件共用的数据管理起来,重复利用。有点类似缓存的意思。 二、Pinia环境搭建 …

【LVGL-按钮按钮矩阵部件】

LVGL-按钮&按钮矩阵部件 ■ LVGL-按钮部件■ 按钮部件&#xff1a; 点击三个按钮一个回调函数修改label值。 ■ LVGL-按钮矩阵部件■ 示例一&#xff1a;按钮换行&#xff0c;和宽度设置。■ 示例二&#xff1a;设置按钮宽度为2倍■ 示例三&#xff1a;获取点击的按钮下标&…

大数据主要组件HDFS Iceberg Hadoop spark介绍

HDFSIceberghadoopspark HDFS 面向PB级数据存储的分布式文件系统&#xff0c;可以存储任意类型与格式的数据文件&#xff0c;包括结构化的数据以及非结构化的数据。HDFS将导入的大数据文件切割成小数据块&#xff0c;均匀分布到服务器集群中的各个节点&#xff0c;并且每个数据…

Gartner发布网络安全应用生成式AI指南:应用生成增强功能提升企业网络安全能力和效率的三个领域及9个实例

生成增强功能是专门为提高知识工作者的生产力、解决网络安全技能短缺问题并降低大型语言模型带来的风险而构建的。安全和风险管理领导者通过在运营中采用生成增强来提高团队的能力。 主要发现 与其他人工智能实现相比&#xff0c;生成式人工智能 (GenAI)解决方案&#xff0c;特…

绿色节能|AIRIOT智慧建材能耗管理解决方案

建材供应是建筑业不可或缺的一个重要环节&#xff0c;在环保和企业可持续发展的双重需求下&#xff0c;建材生产商对建材生产过程中的能耗掌握和能耗管理尤其关注。但在实际生产和运营过程中&#xff0c;传统的建材能耗管理方式往往存在如下痛点&#xff1a; 用户管理权限不完善…

汽车ECU的虚拟化技术(五) -- 对MCU虚拟化实现难点的思考

目录 1.概述 2.虚拟化软件的难点 2.1 虚拟化中的中断处理 2.2 虚拟ECU的通信 3.小结 1.概述 在上面文章里汽车ECU的虚拟化技术(四) -- 对MCU虚拟化实现难点的思考-CSDN博客&#xff0c;解了OEM面临新的电子电气架构下的集成难点&#xff0c;引入了hypervisor以及VM调度机制…

ARM-Linux 开发板下安装编译 OpenCV 和 Dlib

安装 OpenCV 和 Dlib 不像在 x86 平台下那样简单&#xff0c;用一句命令就可以自动安装完。而在 ARM 平台中许多软件都需要自行下载编译&#xff0c;且还有许多问题&#xff0c;本篇文章就是记录在 ARM 平台下载 OpenCV 踩过的坑。 硬件环境&#xff1a; RK3568 Ubuntu20.04…

全国大学生数学建模大赛备赛——相关系数的求解(皮尔逊(pearson)、斯皮尔曼(spearman)、肯德尔(kendall)相关系数)

相关系数是用来衡量两个变量之间线性相关程度的指标。它的取值范围在-1到1之间&#xff0c;当相关系数为1时表示两个变量完全正相关&#xff08;即一个变大另一个也变大&#xff09;&#xff0c;当相关系数为-1时表示两个变量完全负相关&#xff08;即一个变大另一个变小&#…

定制 Elasticsearch 镜像

安装ik分词器 下载ik分词器 下载地址&#xff1a;https://github.com/infinilabs/analysis-ik/releases Dockerfile FROM docker.elastic.co/elasticsearch/elasticsearch:8.12.2 COPY ./elasticsearch-analysis-ik-8.12.2.zip /opt/ RUN bin/elasticsearch-plugin instal…

国产DSP FT-M6678开发-网络开发

简介 今天准备调试FT-M6678的网络部分,参考例程是《3. FT-M6678 Project\1. FT-M6678 接口驱动函数\13. GMAC\NDK 协议栈工程-V7.1\03应用例程\UDP\DSP端应用程序\DSP_UDP_Test_V7》,首先参照文档将NDK使用官方提供的NDK进行替换: 将D:\ti\pdk_C667…

FMEA助力新能源汽车行业腾飞:安全、效率双提升

随着新能源汽车市场的迅猛发展&#xff0c;各大车企纷纷加大研发力度&#xff0c;力求在激烈的市场竞争中脱颖而出。其中&#xff0c;FMEA&#xff08;故障模式与影响分析&#xff09;作为一种先进的质量管理工具&#xff0c;正被越来越多地应用于新能源汽车的研发和生产过程中…

深度学习pytorch——链式法则(Chain rule)(持续更新)

这篇文章将会以深度学习的角度解析链式法则。 基本的求导法则 高中的时候就学过&#xff0c;大学高数也巩固了一遍&#xff0c;这里不再赘述。 深度学习中的链式法则 为什么要讲述深度学习中的链式法则&#xff1f; 通过链式法则&#xff0c;我们可以得到中间层信息&#x…

unbantu Apache的基本配置与配置静态资源访问

目录 前言: 1.Apache介绍 2.安装Apache 3. 测试Apache服务是否启动成功 3.1配置Servername 3.2重启服务 4.配置Apache主页面 5. 配置静态的资源 6.为静态资源设置访问权限(基于源地址) 致谢: 前言: 此博客是基于unbantu的Apache服务的详细解析&#xff0c;在这片博…

Elasticsearch面试系列-03

1. Elasticsearch 中 refresh 和 flush 有什么区别? 整体流程: 1、数据写入buffer缓冲和translog日志文件中。当写一条数据document的时候,一方面写入到mem buffer缓冲中,一方面同时写入到translog日志文件中。 2、buffer满了或者每隔1秒(可配),refresh将mem buffer中的…

34 | 到底可不可以使用join?

在实际生产中&#xff0c;关于 join 语句使用的问题&#xff0c;一般会集中在以下两类&#xff1a; 1. 我们 DBA 不让使用 join&#xff0c;使用 join 有什么问题呢&#xff1f; 2. 如果有两个大小不同的表做 join&#xff0c;应该用哪个表做驱动表呢&#xff1f; 今天这篇文…

【算法刷题 | 二叉树 02】3.21 二叉树的层序遍历01(5题:二叉树的层序遍历、层序遍历||、右视图、层平均值,以及N叉树的层序遍历)

文章目录 5.二叉树的层序遍历5.1 102_二叉树的层序遍历5.1.1问题5.1.2解法&#xff1a;队列 5.2 107_二叉树的层序遍历||5.2.1问题5.2.2解法&#xff1a;队列 5.3 199_二叉树的右视图5.3.1问题5.3.2解决&#xff1a;队列 5.4 637_二叉树的层平均值5.4.1问题5.4.2解决&#xff1…

.NET Core 服务实现监控可观测性最佳实践

前言 本次实践主要是介绍 .Net Core 服务通过无侵入的方式接入观测云进行全面的可观测。 环境信息 系统环境&#xff1a;Kubernetes编程语言&#xff1a;.NET Core ≥ 2.1日志框架&#xff1a;Serilog探针类型&#xff1a;ddtrace 接入方案 准备工作 DataKit 部署 DataK…