【基础算法】离散化 学习笔记

离散化是排序在「线性降维」上的典型应用:值域很大而只需保留大小关系时,把元素映射为其排序后的名次,将值域压缩到与数组长度同阶,配代码模板与实现要点。

学习笔记

代码模板-离散化

提供离散化的数组与 vector 两种代码模板,包含排序去重、lower_bound 查询映射关系,适用于值域压缩场景。

代码模板

洛谷 P1637 三元上升子序列 - Solution

给定长度为 $N$ 的序列,求满足 $i < j < k$ 且 $a[i] < a[j] < a[k]$ 的三元组个数。$N \le 10^5$,$a_i \le 10^9$。通过枚举中间位置 $j$,利用权值树状数组分别统计左右两侧的可行元素个数,$O(N \log N)$ 解决。

题解

Codeforces 670C Cinema - Solution

每个人有一种语言,每部电影有语音与字幕两种语言,选择「语音听懂人数最多、并列时字幕听懂人数最多」的电影。先离散化语言编号,用数组统计各语言人数后线性比较,O(n+m) 解决。

题解

洛谷 P1955 程序自动分析 - Solution

NOI 2015 约束满足问题,利用并查集维护相等关系的传递性,离散化压缩变量编号后判定不等约束是否冲突,时间复杂度 O(n α(n))。

题解

本站由 zaochen 使用 Stellar 2.0.0 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
全站访问量 - 次 · 访客数 - 人 · 本页面浏览 - 次

站内搜索

没有找到内容!