P9497 「RiOI-2」weight

发布时间:2026/11/5 11:16:52

P9497 「RiOI-2」weight 记录146#includebits/stdc.h using namespace std; #define ll long long // 防止数据溢出使用long long //n*n的矩阵n是1e3 所以N是1e6 const int N1e65; ll a[N],n,q,cnt; // a数组存储打平后的矩阵cnt记录总数字个数 // 从大到小排序的比较函数 bool cmp(ll a,ll b) { return ab; } //因为每一行都可以“任意重排”这就意味着我们拥有极大的自由度。我们可以把矩阵中所有 ≥v的数字像发牌一样尽可能均匀地分配到不同的列里去。 int main() { ios::sync_with_stdio(false); // 关闭同步加速IO cin.tie(0); cinnq; // 1. 读入矩阵并打平成一维数组 for(ll i1;in;i) { for(ll j1;jn;j) { cina[cnt]; } } // 2. 预处理从大到小排序 sort(a1,acnt1,cmp); // 3. 处理每次询问 while(q--) { ll x; cinx; ll ans0,l1,rcnt; // 手写二分查找寻找最后一个 x 的位置 while(lr) { ll mid(lr)/2; if(a[mid]x) { rmid-1; // 中间值小于x说明答案在左边 } else { lmid1; // 中间值x更新答案并向右寻找 ansmid; } } // 满足条件的数字个数不能超过矩阵的列数 n coutmin(ans,n)\n; } return 0; }题目传送门https://www.luogu.com.cn/problem/P9497前言我是一名专注信奥赛CSP-J/S、NOIP的教练。如果你觉得这篇题解对你有帮助欢迎点击关注我的CSDN账号我会持续更新高质量算法解析。我深知算法思维的构建远比单纯通过题目更重要本系列题解不局限于AC代码的堆砌而是致力于拆解题目背后的逻辑链条与核心知识点备赛路上若遇瓶颈欢迎随时评论或私信我将甄选典型疑难问题通过视频讲解或撰写专项文章的形式为你提供深度答疑。代码分块详细解释1. 头文件、常量与全局变量定义#includebits/stdc.h using namespace std; #define ll long long // 防止数据溢出使用 long long // n*n的矩阵n是1e3所以总元素个数是1e6 const int N1e65; ll a[N], n, q, cnt; // a数组存储打平后的矩阵cnt记录总数字个数详细分析矩阵的最大规模是 10^3×10^310^6 因此数组大小需要开到 10^6级别。由于矩阵中的数值和阈值 vv 最高可达 10^9 为了防止潜在的溢出风险代码统一使用了long long类型。cnt变量用于在读取矩阵时充当一维数组的索引计数器。2. 排序比较函数// 从大到小排序的比较函数 bool cmp(ll a, ll b) { return a b; }详细分析标准库的sort默认是升序排列。为了方便后续的二分查找我们希望 ≥v≥v 的数字集中在数组的前端这里自定义了一个降序排列的比较函数。3. 主函数输入处理与预处理int main() { ios::sync_with_stdio(false); // 关闭同步加速IO cin.tie(0); cin n q; // 1. 读入矩阵并打平成一维数组 for(ll i 1; i n; i) { for(ll j 1; j n; j) { cin a[cnt]; } } // 2. 预处理从大到小排序 sort(a 1, a cnt 1, cmp);详细分析这部分完成了核心的预处理。通过双重循环将二维矩阵的 n^2个元素全部读入一维数组a中。随后调用sort进行降序排序。这一步的时间复杂度是 O(n2log⁡n2) 由于只执行一次完全可以接受。4. 核心逻辑处理询问与手写二分// 3. 处理每次询问 while(q--) { ll x; cin x; ll ans 0, l 1, r cnt; // 手写二分查找寻找最后一个 x 的位置 while(l r) { ll mid (l r) / 2; if(a[mid] x) { r mid - 1; // 中间值小于x说明答案在左边 } else { l mid 1; // 中间值x更新答案并向右寻找 ans mid; } } // 满足条件的数字个数不能超过矩阵的列数 n cout min(ans, n) \n; } return 0; }详细分析这是代码的灵魂部分用于处理高达 5×1055×105 次的询问。手写二分对于当前的阈值 xx 我们需要找出数组中有多少个元素 ≥x≥x 。由于数组是降序的所有 ≥x≥x 的元素会连续出现在数组的前端。二分查找的else分支a[mid] x会不断向右推进l并用ans记录下当前满足条件的最右位置。循环结束后ans就是 ≥x≥x 的元素总个数。贪心取最小值ans代表了理论上能凑出的最大列数。但如果ans n比如矩阵里全是 ≥x≥x 的大数ans达到了 n2n2 受限于矩阵只有 nn 列我们最多只能让 nn 列达标。因此最终输出min(ans, n)。核心逻辑总结表代码模块核心变量/操作精炼作用解决的痛点矩阵打平cin a[cnt]将二维矩阵转化为一维数组打破行列的物理限制便于全局统计和排序降序预处理sort(..., cmp)将数组按从大到小排列使得所有 ≥v≥v 的元素集中在数组前端为二分查找提供单调性基础
延伸阅读

更多相关文章

2026/11/4 18:52:52

ct-cockpit高级功能:大文件分片上传和定时任务管理

ct-cockpit高级功能:大文件分片上传和定时任务管理 【免费下载链接】ct-cockpit A web-based operations and maintenance tool designed to provide system administrators and users with an easy-to-use interface for managing and monitoring Linux servers. …

2026/11/5 11:14:04

Java机器学习图书推荐系统源码:ItemCF与TF-IDF工程实践

简介:这份源码包围绕基于机器学习的图书推荐系统展开,面向Java Web课程设计、毕业设计以及希望实践协同过滤推荐算法的开发者,重点解决图书个性化推荐与后台管理问题。项目包含图书管理、读书会管理及科技、人文、历史、中小学等图书分类推荐…

2026/11/5 11:14:04

课堂行为ST自动分析软件:毕业设计可运行资源与调优指南

简介:这份资源是面向教育技术方向学生与毕业设计学习者的课堂行为智能分析软件项目,通过AI与计算机视觉技术对课堂视频或智能设备采集的数据进行学生行为检测与参与度量化,为教学效果评估提供参考。压缩包共760个文件,以631个Pyth…

2026/11/5 11:14:04

readelf解析.so:从ELF头到重定位表的崩溃偏移定位清单

简介:一份以 Android 平台 so 文件解析为主题的示例工程,面向具备 Java 基础、希望进一步了解 JNI 与原生动态库的开发者,可用于梳理动态链接库的代码段、数据段、符号表和重定位信息等基本结构,并建立 Java 层与原生层衔接的整体…

2026/11/5 11:14:04

基于Django的运维平台实战:资产管理、任务执行与发布流程

简介:这份资源是一套基于Django框架开发的轻量级运维平台源码,面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员,可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑