当前位置: 首页 > news >正文

洛谷 P12865

给定长度为 \(n\) 的序列 \(a\)\(q\) 次操作。每次操作为对 \(a\) 进行一次冒泡排序(\(a_i > a_{i + 1}\) 时交换)或者查询 \(a_l \sim a_r\) 之和。

对于一次冒泡排序,显然会把最大值挪到最后面。所以,当 \(a_1 \sim a_i\) 做完冒泡排序后,\(a’_i \leftarrow \max\limits_{j = 1} ^ i a_j\),再和 \(a_{i + 1}\) 进行比较,尝试交换。

因此得到一个结论:一次冒泡排序后 \(a’_1 \sim a_i\) 一定是原来 \(a_1 \sim a_{i + 1}\)最小的 \(i\) 个。

再尝试考虑两次冒泡排序。对于 \(i + 1\) 来说,\(a'_1 \sim a'_i\)\(a_1 \sim a_{i + 1}\) 中小的 \(i\) 个;\(a'_1 \sim a'_{i + 1}\)\(a_{1} \sim a_{i + 2}\) 中小的 \(i + 1\) 个。说明什么?说明 \(a'_{i + 1}\)\(a_1 \sim a_{i + 1}\) 中最大的与 \(a_{i + 2}\) 之间小的那个。所以经过两次冒泡后 \(a''_{1} \sim a''_{i}\)\(a_1 \sim a_{i + 2}\) 中小的 \(i\) 个。

这是我们就可以得(猜)到一个结论:经过 \(c\) 次冒泡排序后,\(a_1 \sim a_{i}\)\(a_{1} \sim a_{i + c}\) 中最小的 \(i\) 个。

换个角度,因为一次冒泡一个元素知道只能向左移一次,所有考虑的范围也就是 \(a_1 \sim a_{i + c}\) 了。

做到这里,这个题就差不多了,\(a_1 \sim a_i\)用主席树搞一下 ,\(a_{l} \sim a_r\) 前缀和减一下即可。

http://www.rkmt.cn/news/23188.html

相关文章:

  • ubuntu清理内存缓存
  • 单线程如何撑起百万连接?I/O多路复用:现代网络架构的基石
  • 10.17 CSP-S模拟33 改题记录
  • 包装类(基本数据类型对应的引用数据类型)
  • 系统稳定性监控
  • 详细介绍:k8s部署前后分离架构微服务——跨域和缓存问题
  • npm镜像配置
  • 一些特性
  • AGC 板刷记录1
  • 2025.10.17总结
  • 记Windows 11环境Rust下载安装配置流程
  • K8s学习笔记(九) job与cronjob - 教程
  • [PaperReading] VLM2Vec-V2: Advancing Multimodal Embedding for Videos, Images, and Visual Documents
  • 标悬浮展开多级菜单
  • 深入解析Pure恶意软件家族:从RAT到构建器再到开发者
  • 3. JVM 运行时数据区
  • 软工学习日志
  • 修电脑不求人:AI智能修复电脑工具的体验分享
  • Xcode上编译调试ffmpeg - 详解
  • 《程序员修炼之道》阅读笔记1
  • OOP - 实验一
  • 题解:qoj8329 Excuse
  • VMware17.6图文安装教程(附安装包)VMware17.6
  • Sourcetree - Git 备份
  • uni-app x实现上下拉动,动态加载数据
  • 企业微信ipad协议稳定防封的最新最全功能
  • 企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案
  • 重新思考钓鱼攻击意识培训:网络安全的关键反思
  • 任务分解与小模型如何降低AI成本
  • spring事件监听的核心机制