离散化是排序算法对于线性降维的一个重要应用。通常情况下,如果一组数值域很大,但是只考虑他们的大小关系,则可以通过离散化的方式将值域降维到不重复元素个数(和数组长度同数量级)。
比如:$[1,20,300,4234,51234,64321,114514,1919810]$ 这组数,如果只考虑他们的大小关系,则和 $[1,2,3,4,5,6,7,8]$ 等价。将数组排序后就可以用元素所在的位置代表这个元素。

代码实现

代码模板-离散化

例题

  • Codeforces 670C Cinema:已知 $n$($1≤n≤2×10^5$)位科学家的语言 $a_i$($1≤a_i≤10^9$)及 m($1≤m≤2×10^5$)场电影,每场电影 $j$ 有配音语言 $b_j$ 与字幕语言 $c_j$($1≤b_j,c_j≤10^9$ 且 $b_j \neq c_j$),定义 $f_j = |{i : a_i = b_j}|$、$s_j = |{i : a_i = c_j}|$,求使 $(f_j, s_j)$ 字典序最大的电影编号 $j$。题解:Codeforces 670C Cinema - Solution.
  • 洛谷 P1955 程序自动分析:给定 $t$($1\le t\le 10$)组相互独立的判定问题,每组含 $n$($1\le n\le 10^5$)条形如 $x_i=x_j$($e=1$)或 $x_i\neq x_j$($e=0$)的约束,其中变量下标 $i,j$ 可达 $10^9$,求是否存在对变量的赋值使该组全部约束同时成立,对每组输出 YESNO。题解:洛谷 P1955 程序自动分析 - Solution

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