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>这…

ARPACK-ng安装教程

ARPACK 是一个用于解决大型稀疏或稠密特征值问题的软件包。 arpack-ng是目前方便获得的arpack的替代版本。主页地址为https://github.com/opencollab/arpack-ng 安装方法 Using autotools 使用Autotools&#xff0c;只要输入工程中的目标文件、依赖文件、文件目录等信息&…

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;并且每个数据…

服务器感染了.kat6.l6st6r勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 随着信息技术的不断发展&#xff0c;网络安全问题愈发凸显&#xff0c;其中勒索病毒成为了一种常见的网络威胁。近期&#xff0c;一种名为.kat6.l6st6r的勒索病毒引起了广泛关注。该病毒通过加密用户文件并要求支付赎金的方式&#xff0c;给受害者带来了巨大…

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

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

CSP认证——202012-1 期末预测之安全指数

题目背景 期末要到了&#xff0c;小菜同学找到了自己的好朋友顿顿&#xff0c;希望可以预测一下自己这学期是否会挂科。 题目描述 首先&#xff0c;顿顿选取了如“课堂表现”、“自习时长”、“作业得分”、“社团活动参与度”等 项指标作为预测的依据。 然后&#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调度机制…

react中使用google map展示地图

1. 安装插件 google-maps-react npm install google-maps-react --save 2. 使用 import React, { Component } from "react"; import { Map, GoogleApiWrapper, Marker } from "google-maps-react";class MapContainer extends Component {render() {co…

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;即一个变大另一个变小&#…

【Flutter】数据库操作的基本介绍

上一篇博文介绍了Flutter 如何读取 excel 文件&#xff0c;这一篇我们来介绍如何操作数据库。 Flutter 提供了三种数据持久化方式&#xff1a; 将 KV 值存储到硬盘&#xff1a;shared_preferences读取和写入文件&#xff1a;Read and write files数据库&#xff1a;sqflite。…

实现节流防止连点方法以及调用方式

1、新建throttle.js文件&#xff0c;复制该代码 export function throttle(fn, delay) { let latestTime 0 return function() { const _this this const _arguments arguments const nowTime new Date().getTime() if (nowTime - latest…

定制 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…

IOS面试题编程机制 16-20

16. 详述iOS 中的事件的传递:响应链?事件沿着一个指定的路径传递直到它遇见可以处理它的对象。 首先一个UIApplication 对象从队列顶部获取一个事件并分发(dispatches)它以便处理。 通常,它把事件传递给应用程序的关键窗口对象,该对象把事件传递给一个初始对象来处理。 初始…

国产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…