洛谷 B3694:数列离散化 ← 数组 + sort + unique + lower_bound

news/2025/11/24 9:02:33/文章来源:https://www.cnblogs.com/triwa/p/19262279

【题目来源】
https://www.luogu.com.cn/problem/B3694

【题目描述】
给定一个长度为 n 的数列 a。定义 rank(i) 表示数列 a 中比 ai 小的不同数字个数再加一。
对 1≤i≤n,现在请你求出所有的 rank(i)。

【输入格式】
输入的第一行是一个整数,表示数据组数 T。接下来依次给出每组数据的信息:
第一行是一个整数,表示数列长度 n。
第二行有 n 个整数表示数列 a,第 i 个整数表示 ai。​​​​​​​

【输出格式】
对每组数据,输出一行 n 个整数,用空格隔开,依次表示 rank(1) 到 rank(n)。​​​​​​​

【输入样例】
3
3
1 2 3
5
1 6 2 2 7
4
-1 -2 -3 -3​​​​​​​

【输出样例】
1 2 3
1 3 2 2 4
3 2 1 1​​​​​​​

【数据范围】
对全部的测试点,保证 1≤T≤5,1≤n≤10^5,−10^9≤ai≤10^9。

【算法分析】
● 离散化的本质,是映射。原理是将间隔很大的元素,映射到相邻的位置上,从而减少对空间的需求,也减少计算量。

#include <bits/stdc++.h>
using namespace std;const int maxn=1e5+5;
int a[maxn];int main() {int n;cin>>n;for(int i=0; i<n; i++) {cin>>a[i];}//discretizationsort(a,a+n);int cnt=unique(a,a+n)-a;//Output the discretized resultsfor(int i=0; i<cnt; i++) {cout<<a[i]<<" -> "<<i+1<<endl;}return 0;
}/*
in:
6
10 12 1000 -50 30 10out:
-50 -> 1
10 -> 2
12 -> 3
30 -> 4
1000 -> 5
*/

● 离散化操作的作用
(1)减少数据范围(如将 [1e9, 2e9, 3e9] 映射为 [1,2,3]),节省存储空间。
(2)使数据适用于树状数组等需要紧凑下标的数据结构。
(3)保持原数据的偏序关系(若 a[i] < a[j],则离散化后仍有 a'[i] < a'[j])。

【算法代码一:下标从 0 开始
● sort(t,t+n); 将数组 t 的第 0 到第 n-1 个元素升序排序,为去重和映射做准备。
● int cnt=unique(t,t+n)-t; 对排序后的数组去重,返回去重后的元素个数 cnt,此时 t[0..cnt-1] 为无重复的有序序列。
● a[i]=lower_bound(t,t+cnt,a[i])-t+1; 将原数组 a 的每个元素通过二分查找定位到 t 中的位置,减去基地址后得到离散化后的新值(范围是 1~cnt)。

#include <bits/stdc++.h>
using namespace std;const int maxn=1e5+5;
int a[maxn],t[maxn];int main() {int T,n;cin>>T;while(T--) {cin>>n;for(int i=0; i<n; i++) {cin>>a[i];t[i]=a[i];}sort(t,t+n);int cnt=unique(t,t+n)-t;for(int i=0; i<n; i++) {a[i]=lower_bound(t,t+cnt,a[i])-t+1;cout<<a[i]<<" ";}cout<<endl;}return 0;
}/*
in:
3
3
1 2 3
5
1 6 2 2 7
4
-1 -2 -3 -3out:
1 2 3
1 3 2 2 4
3 2 1 1
*/

【算法代码二:下标从 1 开始

#include <bits/stdc++.h>
using namespace std;const int maxn=1e5+5;
int a[maxn],t[maxn];int main() {int T,n;cin>>T;while(T--) {cin>>n;for(int i=1; i<=n; i++) {cin>>a[i];t[i]=a[i];}sort(t+1,t+n+1);int cnt=unique(t+1,t+n+1)-(t+1);for(int i=1; i<=n; i++) {a[i]=lower_bound(t+1,t+cnt+1,a[i])-t;cout<<a[i]<<" ";}cout<<endl;}return 0;
}/*
in:
3
3
1 2 3
5
1 6 2 2 7
4
-1 -2 -3 -3out:
1 2 3
1 3 2 2 4
3 2 1 1
*/



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/153268411
https://blog.csdn.net/hnjzsyjyj/article/details/143275575







 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:2025年接单经验和软件外包平台一览

完整教程:2025年接单经验和软件外包平台一览pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

SpringCloud 常见面试题(三)

服务网关 在微服务架构中,网关的作用是什么 在微服务架构中,网关(Gateway)具有以下作用:统一入口:网关为所有的微服务提供一个唯一的入口点,从而简化了客户端与服务的交互,同时保障了后台服务的安全性。 鉴权校…

4.Rocky Linux 网络配置 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年最新国际货运代理公司实力推荐榜:全链路服务力到行业口碑深度评估

国际货运代理(International Freight Forwarding)指由专业机构代为处理国际运输中的订舱、报关、仓储、运输规划及目的国清关等流程,是连接全球贸易与跨境物流的重要服务体系。 随着全球贸易回稳、跨境电商增长及海…

MySQL 8.4:未使用 mysql_native_password 却报插件未加载(Plugin mysql_native_password is not loaded)?

现象 最近遇到一个有趣的案例:在一个新创建的 MySQL 8.4 实例中,使用用户 u2 登录时,返回了Plugin mysql_native_password is not loaded错误。 $ mysql -h127.0.0.1 -P3316 -uu2 -p123mysql: [Warning] Using a pa…

水题乱做

P11746 设 $R$ 为单色行的数量,$C$ 为单色列的数量。 根据题意,AI 的得分 $S_{AI} = R + C$,你的得分 $S_P = (n - R) + (m - C) = n + m - (R + C) = n + m - S_{AI}$。 获胜条件是 $S_P$ 为奇数且 $S_{AI}$ 为偶数…

第四讲GNN图神经网络

第四讲GNN图神经网络基于空间的卷积(Spatial-based convolution) 基于谱的卷积(Spectral-based convolution)

最短路的板子默写

Dj算法 (好像不太会超时)反正我拿它冲锋了 突然发现自己忘干净了 先梳理一下(和topu不同 topu是找到第一个入度=0,遍历出边 最短路是本次循环找到距离最小点遍历出边 1.建立边 用邻接表e[u]push_back(v) 2.dj函数 …

完整教程:AI超级智能体项目中的多模型集成实践:挑战、架构与代码详解

完整教程:AI超级智能体项目中的多模型集成实践:挑战、架构与代码详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

【URP】Unity[相机]渲染类型

URP 相机渲染类型概述 在 Unity Universal Render Pipeline (URP) 中,相机组件提供了多种渲染类型选项,用于控制相机如何参与渲染流程。这些类型决定了相机是否渲染、【从UnityURP开始探索游戏渲染】专栏-直达URP 相…

20251028在荣品RD-RK3588-MID开发板的Android13系统下解决关机的时候最近打开的应用不关的难题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实验4 NoSQL和关系数据库的操作比较

实验要求 只给出这四种数据库的JAVA客户端编程的相关代码具体代码 导入依赖: <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.…

构建卓越开发者体验的核心原则

本文深入探讨了构建卓越开发者体验的三个核心优化点:周期时间、专注度和认知负载,并分享了在Google和LinkedIn的实践经验,帮助开发团队提升效率和幸福感。什么造就了卓越的开发者体验? 我在"开发者体验"…

杂题选做-7

#61 CF1927G 题目传送门 观察:每一次操作都可以转化为一次对已覆盖区间的扩展。 因此定义 \(f_{i,j}\) 表示已经考虑了前 \(i\) 个道具的使用情况,并且已经覆盖了 \([1,j]\) 的最小操作次数,第 \(i\) 个道具可以覆盖…

上周热点回顾(11.17

热点随笔: Visual Studio 2026 上手体验,AI 懂你、界面清爽、协作无缝 (小码编匠) 九成九新自用C#入门文档 (假设狐狸有信箱) .net 行不行?在线客服系统成功支持客户双11大促,21客服在线,高…

软件设计实验十七与十八:迭代器模式,解释器模式

[实验任务一]:JAVA和C++常见数据结构迭代器的使用 信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小…

详细介绍:MySQL-8.0.43 免安装版保姆教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【GitHub每日速递 20251124】超神!verl助力大语言模型强化学习,多项特性引领行业新潮流

原文: https://mp.weixin.qq.com/s/PDq5QuTZOtJr_SbnD-29qA 超神!verl助力大语言模型强化学习,多项特性引领行业新潮流 verl 是一个用于大语言模型的强化学习框架的工具库。简单讲,它帮助开发者用强化学习技术优化大…

【STM32工程开源】STM32单片机智能台灯系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ai元人文构想:从“题海战术”到“理解原理”:AI治理中规则逻辑与价值协议的差异论证与效率抉择

从“题海战术”到“理解原理”:AI治理中规则逻辑与价值协议的差异论证与效率抉择 引语 岐金兰说:"其实我们最大的困惑是,A/B方案,都基于学习迭代过程,二者的差异与优劣,如何论证?" 在人工智能治理的研…