视频加载失败

数组离散化

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开始
};

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

数组离散化
https://blog.81vm3.xyz/posts/array-discretization/
作者
Blume
发布于
2024-08-12
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Blume
I build interesting things.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
38
分类
5
标签
98
总字数
23,078
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0

当前页面没有目录

文章目录

当前页面没有目录