数组离散化
144 字
1 分钟
数组离散化
当你需要比较元素的大小,或者节省空间的情况:
// 离散化sort(begin(v_sorted), end(v_sorted));v_sorted.erase(unique(begin(v_sorted), end(v_sorted)), end(v_sorted));
// 映射离散化索引(1-based index)for (int i = 0; i < (int)v_sorted.size(); i++) { index_map[v_sorted[i]] = i + 1;}vector<ll> arr(n + 1);vector<ll> sorted_arr(n + 1);
for (int i = 1; i <= n; i++) { cin >> arr[i]; sorted_arr[i] = arr[i]; // 复制数组用于排序}
sort(next(begin(sorted_arr)), end(sorted_arr)); // 仅排序副本auto f = [&](ll x) { return lower_bound(next(begin(sorted_arr)), end(sorted_arr), x) - sorted_arr.begin();};#define all(x) x.begin(), x.end()#define unq_all(x) x.erase(unique(all(x)), x.end())#define sort_all(x) sort(all(x))
vector<ll> g = v;sort_all(v);unq_all(v);auto get_id = [&](ll x) { return lower_bound(g.begin(), g.end(), x) - g.begin() + 1; // 下标从1开始};文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
最大上升三元组数量
数据结构与算法用两棵树状数组统计数组中最大上升三元组数量的 C++ 实现。
2
MEX:最小非负整数
数据结构与算法MEX 的三个性质,以及用 set + 计数数组支持插入删除后 O(log n) 查询 MEX 的实现。
3
并查集
数据结构与算法并查集的基本概念(Union/Find)与路径压缩 C++ 模板。
4
Grafana 可视化与监控
云原生与运维Grafana 的定位、常见数据源与 Grafana + Prometheus 经典监控链路。
5
微服务之间如何传递 trace
后端开发跨服务传递的是 trace 上下文而非 tracer:HTTP header、gRPC metadata 与 MQ 消息头的标准做法。
随机文章随机推荐











