S10-蓝桥杯 17822 乐乐的积木塔

作者:郑恩赐日期:2026/4/25

S10-蓝桥杯 17822 乐乐的积木塔

摘要:本文详细解析蓝桥杯17822题"乐乐的积木塔",重点剖析题目中"连续递减积木塔"等绕口表述的真实含义,分享个人从困惑到理解的解题历程,并提供简洁的Python题解。

1. 题目描述 📋

1.1 问题描述

在乐乐的玩具箱中,有一系列的积木,每个积木上都标记有一个高度值。乐乐想要找出每个积木能够成为最高的连续递减积木塔的一部分的最大高度。对于每个积木,求出包含该积木的最长递减积木序列的长度。

1.2 输入格式

第一行包含一个整数 NNN。

第二行包含 NNN 个整数,表示每个积木的高度。

1.3 输出格式

输出 NNN 个整数,每个整数代表以第 iii 个积木为一部分的最长递减积木序列的长度。

1.4 样例

样例输入:

15
23 2 1 1 4
3

样例输出:

13 3 3 1 1
2

1.5 评测数据规模

  • 1≤N≤1051 \leq N \leq 10^51≤N≤105
  • 0≤Ai≤1050 \leq A_i \leq 10^50≤Ai​≤105

1.6 运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

总通过次数: 6 | 总提交次数: 6 | 通过率: 100%

1.7 难度与标签

  • 难度:中 LV.8
  • 标签:数学

1.8 原题链接


2. 题目理解难点分析 🤔

个人感受:这道题最大的难点其实在于题目的理解。我第一次看到这道题时,完全不知道"连续递减积木塔"是什么概念,对题目根本无从下手,最后只能求助豆包才搞明白题意。但一旦理解了题意,其实这道题非常简单

2.1 什么是"连续递减积木塔"?

核心概念拆解

这个题目名称听起来很唬人,其实拆解开来就是三个关键词:

  • 连续:在原数组中位置连续(相邻),不能跳着选
  • 递减:后面的数必须比前面的数小(严格递减)
  • 积木塔:就是一个序列的比喻说法

通俗理解

想象你把积木一块一块叠起来,每块积木的高度必须比下面那块矮,而且这些积木在原数组中必须是挨着的。

数学定义

对于数组 AAA,如果存在一段连续子数组 A[i..j]A[i..j]A[i..j] 满足:A[i]>A[i+1]>A[i+2]>...>A[j]A[i] > A[i+1] > A[i+2] > ... > A[j]A[i]>A[i+1]>A[i+2]>...>A[j]那么这就是一个"连续递减积木塔"。

举例说明

对于数组 [5, 3, 4, 2, 1]

连续子序列是否递减说明
[5, 3]5 > 3,是递减
[3, 4]3 < 4,不是递减
[4, 2, 1]4 > 2 > 1,是递减
[5, 3, 4]3 < 4,不是递减
[5]单个元素, trivially 递减

本题要求

对于数组中的每个位置,找出包含该位置的最长连续递减子序列的长度。

连续递减子序列参考资料:

2.2 "最高的连续递减积木塔的一部分的最大高度"是什么意思?

拆解这个绕口的句子

原题说:"找出每个积木能够成为最高的连续递减积木塔的一部分的最大高度"

这句话确实有点绕,让我们一步步拆解:

第一层理解:"连续递减积木塔"

就是我们 2.1 节讲的,一段连续且递减的序列。

第二层理解:"最高的...一部分"

"最高"指的是塔的高度(即序列的长度)要尽可能长。 "一部分"意思是这个积木可以在塔的任何位置(顶部、中间、底部都行)。

第三层理解:整句话的意思

对于每个积木,我们要找:包含这个积木的最长连续递减序列有多长

举例说明

数组:[5, 4, 3, 2, 6, 5, 4]

分析第 3 个积木(值为 3):

  • 包含 3 的连续递减序列有:
    • [5, 4, 3] → 长度 3
    • [4, 3] → 长度 2
    • [3] → 长度 1
    • [5, 4, 3, 2] → 长度 4 ✅ 最长!
  • 所以第 3 个积木的答案是 4

再看原题样例

输入:[3, 2, 1, 1, 4]

位置包含它的最长递减序列长度
13[3, 2, 1]3
22[3, 2, 1]3
31[3, 2, 1]3
41[1]1
54[4]1

输出:3 3 3 1 1

关键洞察

这道题本质上是求:每个位置作为"中间点"时,能向左延伸多远 + 能向右延伸多远 - 1(减去重复计算的自己)。

2.3 "求出包含该积木的最长递减积木序列的长度"是什么意思?

这句话是题目要求的核心

题目最后说:"求出包含该积木的最长递减积木序列的长度"

这句话其实比前面那句更直接,让我们拆解一下:

关键词解析

关键词含义
包含该积木这个积木必须在序列里面(可以是开头、中间、结尾)
最长在所有满足条件的序列中,找长度最大的那个
递减积木序列连续递减的序列(就是我们前面讲的"塔")
长度序列中有多少个元素

整句话的意思

对于数组中的每一个位置,输出一个数字,这个数字表示:包含这个位置的最长连续递减序列有多少个元素

具体例子

数组:[7, 5, 6, 4, 3, 2, 8]

分析第 2 个位置(值为 5):

  • 包含 5 的递减序列:
    • [7, 5] → 长度 2
    • [5] → 长度 1
    • [7, 5, 6] → 不是递减(5 < 6)❌
    • [5, 6] → 不是递减 ❌
  • 最长的只有 [7, 5],长度是 2
  • 所以第 2 个位置的答案是 2

再看第 4 个位置(值为 4)

  • 包含 4 的递减序列:
    • [6, 4] → 长度 2
    • [4] → 长度 1
    • [6, 4, 3] → 长度 3
    • [6, 4, 3, 2] → 长度 4 ✅ 最长!
    • [4, 3] → 长度 2
    • [4, 3, 2] → 长度 3
  • 最长的是 [6, 4, 3, 2],长度是 4
  • 所以第 4 个位置的答案是 4

总结

输入一个数组,输出一个同样长度的数组,其中第 iii 个数表示:原数组中第 iii 个元素所在的最长连续递减子序列的长度

💡 最终感悟

所以我感觉这道题的难点在于题目太绕了,考验语文功底!😅

题目用了"最高的连续递减积木塔的一部分的最大高度"这种绕口令式的表达,让很多人(包括我)一看就懵了。但实际上,一旦理解了题意,这道题非常简单


3. 题解代码 📝

3.1 我的解法

💡 理解了题目其实很简单,题解就不过多解释了

1n = int(input())
2blocks = list(map(int, input().split()))
3
4# 存储所有连续递减段
5segments = []
6
7# 当前正在构建的递减段
8current_segment = [blocks[0]]
9
10for height in blocks[1:]:
11    # 如果比当前段最后一个小,就加入
12    if height < current_segment[-1]:
13        current_segment.append(height)
14    # 否则结束当前段,新开一段
15    else:
16        segments.append(current_segment)
17        current_segment = [height]
18
19# 把最后一段加进去
20segments.append(current_segment)
21
22# 输出每一段的长度(重复段长度次)
23for seg in segments:
24    print(f"{len(seg)} " * len(seg), end="")
25

4. 总结 📝

4.1 本题要点回顾

题目本质

把数组分割成若干个连续递减段,每个位置输出它所在段的长度。

解题关键

关键点说明
理解题意"连续递减积木塔" = 连续递减子序列
核心观察同一段内所有位置答案相同
算法思路一次遍历找递减段,输出段长度

4.2 经验总结

做题心得

  1. 读题要仔细:不要被"积木塔"这种比喻迷惑,抓住数学本质
  2. 样例很重要:通过样例反推题意,验证理解是否正确
  3. 简化问题:把绕口的题目描述转化成自己好理解的语言

最终评价

这道题算法本身很简单,难点全在语文理解上!😂

希望以后出题人能说人话...


最后更新时间:2026-04-25


S10-蓝桥杯 17822 乐乐的积木塔》 是转载文章,点击查看原文


相关推荐


GitHub 热榜项目 - 日榜(2026-04-14)
CoderJia_2026/4/16

GitHub 热榜项目 - 日榜(2026-04-14) 生成于:2026-04-14 统计摘要 共发现热门项目: 16 个 榜单类型:日榜 Token赞助:siliconflow 本期热点趋势总结 本期热榜彰显了 AI Agent 深度渗透垂直场景的技术趋势。Claude 生态及其相关的代码辅助开发工具(如 Claude Code 高级优化技巧、记忆插件及自动开发框架)成为绝对核心,反映出开发者对提高 LLM 编码确定性和确定化工作流的强烈需求。同时,金融领域的 Found


《从同步到消息驱动:现代后端交互模式的深度解析与工程实践》
铭渊老黄2026/4/8

《从同步到消息驱动:现代后端交互模式的深度解析与工程实践》 ——以百万行报表导出为例,谈用户体验、可观测性、失败处理与成本权衡 在过去十多年里,我见证了 Python 从“小巧优雅的脚本语言”成长为支撑全球互联网、数据科学、AI 产业的核心力量。无论是 Web 服务、自动化任务、数据处理,还是如今的 LLM 应用,Python 都以其灵活、可读、生态丰富的特性成为开发者的首选。 而在所有后端系统中,一个绕不开的问题是: “系统应该如何与用户交互?” 是同步返回?异步任务?还是彻底消息驱动? 这篇


腾讯这只小程序Agent🦀,帮我找到了最强日程、文件、知识管理姿势
AI袋鼠帝2026/3/31

大家好,我是袋鼠帝。 这两天,我发现微信里悄悄接入了一个全新的Agent入口:WorkBuddy 微信小程序。 通过这个小程序,你不仅能在云端直接召唤龙虾,甚至还能把你办公桌上那台电脑里的本地WorkBuddy,直接拉进微信里干活! 简单来说,就是你可以通过workbuddy小程序,操控你本地电脑上的workbuddy,进而控制你的电脑干活~ 更重要的是,进一步打通了微信的生态,用起来更舒服了。 经常看我文章的朋友对 WorkBuddy 应该不陌生。之前我写过一篇关于它的测评,我也是没想到,阅


GPU 编号进阶:CUDA\_VISIBLE\_DEVICES、多进程与容器化陷阱
吴佳浩2026/3/22

GPU 编号进阶:CUDA_VISIBLE_DEVICES、多进程与容器化陷阱 本篇是系列第二篇。第一篇介绍了 CUDA_DEVICE_ORDER 的基本概念与修复方法。本篇在此基础上,深入讲解 CUDA_VISIBLE_DEVICES 与 CUDA_DEVICE_ORDER 的叠加效应,分析多进程训练框架(torch.distributed、DeepSpeed)中的潜在陷阱,并介绍 Docker 和 Kubernetes 环境下的特殊处理方式,最后给出混合 GPU 环境下的正确架构设计思路。


PostgreSQL 入门学习教程,从入门到精通,PostgreSQL 16 服务器配置与数据库监控终极指南 —语法、案例与实战(18)
知识分享小能手2026/3/14

PostgreSQL 16 服务器配置与数据库监控终极指南 —语法、案例与实战 ✅ 一、服务器配置概述 PostgreSQL 16 的服务器配置主要通过 配置文件 和 SQL 命令 控制,涵盖连接、资源、日志、查询优化、统计收集等核心模块。 📁 主要配置文件: postgresql.conf:主配置文件(全局参数)pg_hba.conf:客户端认证配置(Host-Based Authentication)pg_ident.conf:用户映射配置(可选) ⚙️ 配置方式优先级: 会话级设


分享被迫变直播:AI·Spring养虾记就这样上线了
飞哥数智谈2026/3/6

今天在我的个人公众号上做了自己社群 AI·Spring 的第一次线上分享直播——养虾记第一期。 对,你没看错,社群的第一次直播是在个人号上。 本来想着第一次分享,直接走内部分享的,但昨天晚上忽然想到腾讯会议、飞书会议都有人数、时间限额,大晚上的把我搞清醒了,我又加班尝试的视频号直播。 可社群视频号还没下来,只能临时使用个人视频号直播了,于是,就这样赶鸭上架了。 腾讯会议2人不限时,超过2人40分钟,飞书会议个人版最多25人,最多45分钟,其实可以和嘉宾用腾讯会议的2人模式的,当时有点懵 AI


当 AI Agent 接管手机:移动端如何进行观测
阿里云云原生2026/2/26

作者:高玉龙(元泊) 背景介绍 最近,基于 AI Agent 的各种手机助手在社交媒体上爆火,它能够通过 AI 自动操作手机完成下单、比价、搜索等复杂任务。用户只需说一句“帮我找最便宜的 iPhone”,AI 就能自动打开购物 App、搜索商品、对比价格并完成下单。这种“AI 接管手机”的场景,让很多人看到了未来人机交互的新形态。 然而,当 AI 开始大规模操作手机时,传统的用户行为分析将会面临严重的数据污染问题,如: 转换率虚高:AI 自动下单会对转换率数据造成干扰,导致业务决策误判 用户路


宝塔安装-Redis
吃不胖爹2026/2/17

一、安装 Redis 步骤:宝塔面板 ——> 应用搜索 ——> redis ——> 安装即可 二、配置 Redis 1.宝塔配置 IP 以及密码 方法1 方法2 配置修改,这个就是Redis的配置文件了,可以根据自己的业务需求,进行更改 配置文件 bind 127.0.0.1 改成 bind 0.0.0.0 再追加 requirepass yourPassword(密码) 保存 重启redis 2.放行 Redis 对应的端口 切记:宝塔面板 与 服务器控制台 6379 端口都要放开,


mcp学习笔记(一)-mcp核心概念梳理
Shawn_Shawn2026/2/9

Model Context Protocol (MCP) ,即模型上下文协议,是一个开放标准和开源框架,旨在为大型语言模型(LLMs)应用提供一个标准化的接口,使其能够无缝集成和交互外部数据源、工具和系统。 其主要作用为: 提供标准化接口,让LLMs(或基于LLMs构建的AI代理)能够连接到各种外部资源,如数据库,文件系统,Service Api,爬虫等资源,获取到数据。 LLMs可以实时与mcp双向交互,及时更新LLM中的上下文信息并能够即时执行LLM发出的指令,完成任务。 解决碎片化:统一


Vue-Data 属性避坑指南
发现一只大呆瓜2026/1/31

前言 在 Vue 开发中,我们经常会遇到“明明修改了数据,视图却不更新”的尴尬场景。这通常与 Vue 的初始化顺序及响应式实现原理有关。本文将从 Data 属性的本质出发,解析响应式“丢失”的根本原因及解决方案。 一、 组件中的 Data 为什么必须是函数? 在 Vue 2 中,根实例的 data 可以是对象,但组件中的 data 必须是函数。 核心原因:数据隔离 对象形式:JavaScript 中的对象是引用类型。如果 data 是对象,所有组件实例将共享同一个内存地址。修改实例 A 的数据

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客