发布时间:2026/7/15 0:48:33
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/7/15 0:43:33

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/7/15 1:28:36

GROMACS小分子拓扑文件生成:从基础流程到高级工具全解析

1. GROMACS拓扑文件基础概念刚接触GROMACS模拟时,我最头疼的就是拓扑文件。记得第一次跑蛋白-配体复合物模拟,系统总是莫名其妙崩溃,后来才发现是拓扑文件里氢原子电荷没处理好。拓扑文件本质上就是分子的"身份证",它告…

2026/7/15 1:28:36

SAS有序分类数据分析:Binary、Binomial与Beta分布选型指南

1. 项目概述:当有序分类数据遇上SAS统计建模在实际数据分析工作中,我经常遇到一类既不是连续变量、又不能简单当作无序分类变量来处理的数据——比如患者疼痛评分(1无痛,2轻度,3中度,4重度)&…

2026/7/14 12:47:32

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/14 19:23:19

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/14 18:30:06

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/15 0:08:29

【LINUX】驱动

【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】

2026/7/15 0:08:29

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

🔍 数据简介 本次分享1982-2026年全国村级精度建筑轮廓矢量数据,覆盖全国各省市区县,到村级别精细,为2026年最新实时采集成果,非网传仅60/77个城市的老旧数据。 数据含带高度/不带高度双版本,单体建筑边界精…

2026/7/15 0:08:29

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

🔍 数据简介 本次分享1975-2026年全国高精度水系水路矢量数据,覆盖全国全域,包含河流、水系、水库、运河、湿地、冰川、沟渠等全类别水文要素。 数据集包含双层矢量图层,字段分类清晰、要素齐全,支持2013-2026逐年完整…

2026/7/14 12:47:31

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…