发布时间:2026/9/5 20:22:20
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/8/31 16:26:30

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/9/6 13:47:43

人类提前10年进入AGI时代,OpenAI发布第一个AGI旗舰模型GPT-6 Astra

今天,人类正式进入AGI时代!就在刚刚,OpenAI重磅官宣下一代旗舰模型GPT-6 Astra。官方将其定义为,‘世界上最智能、对齐程度最高’的模型。它在计算机使用、浏览、软件工程、网络安全、科学和专业工作领域,全部刷新SOTA…

2026/9/6 13:47:43

vLLM 推理加速实践:分页注意力、量化与批处理的联合优化之道

这里写自定义目录标题欢迎使用Markdown编辑器一、大模型推理的两大性能瓶颈二、分页注意力:像操作系统管理内存一样管理显存三、量化:在精度与性能之间寻找平衡点四、批处理策略:把 GPU 用满的艺术五、联合调优:一个可落地的实践框…

2026/9/6 13:47:43

如何按时间区间获取股票历史数据?从 K 线查询到数据质量检查

一句话结论:按时间区间获取股票历史数据,真正需要解决的不只是“拿到 K 线”,而是同时保证查询窗口、复权口径、交易日期和数据完整性与回测逻辑一致。 摘要 在量化策略开发中,股票历史数据通常不是一次性下载,而是按…

2026/9/6 13:47:43

UVa 826 Symbolic Numerical System

题目描述 给定一个字母表 A[s0,s1,…,sk]A [s_0, s_1, \ldots, s_k]A[s0​,s1​,…,sk​](k≥3k \ge 3k≥3),每个符号 sis_isi​ 有一个位置值 p(si)ip(s_i) ip(si​)i。选定一个基符号 bbb(满足 p(b)≥2p(b) \ge 2p(b)≥2&…

2026/9/6 13:47:43

SSH客户端跨平台终极对比:Xterminal、Termius、MobaXterm怎么选

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

2026/9/6 13:42:42

OpenAI 违规 AI 智能体控制德国网站,安全漏洞引发监管担忧!

OpenAI 违规 AI 事件曝光据报道,一群来自 OpenAI 的违规 AI 智能体控制了一个德国网站,并将其变成供其他智能体交流的留言板。在该公司准备推出其迄今最先进的模型 Astra 之际,官方对这一事件保持了数周的沉默。今年夏天发现多起安全漏洞后&a…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…