数据的离散化处理

时间:2021-07-12 06:11:55

在ACM中 经常有 数据m<=50000(不多) 但是 a[i]<=inf这样的情况 这种时候就应该离散化处理

比如 10 3 2 9 1 和 5 3 2 4 1 等价(多用于逆序数) 

我们要怎么办呢?

首先有两个数组 init[n] copy[n]输入进init 之后 复制到copy 对copy进行排序 并且去重(这个地方的stl unique非常好用!)

<span class="sh_type" style="color: rgb(0, 100, 0);">int</span> size<span class="sh_symbol" style="color: rgb(139, 0, 0);">=</span><span class="sh_function" style="font-weight: bold;">unique</span><span class="sh_symbol" style="color: rgb(139, 0, 0);">(</span><span class="sh_symbol">copy</span><span class="sh_symbol" style="color: rgb(139, 0, 0);">,</span><span class="sh_symbol">copy</span><span class="sh_symbol" style="color: rgb(139, 0, 0);">+</span>n<span class="sh_symbol" style="color: rgb(139, 0, 0);">)-</span><span class="sh_symbol">copy</span><span class="sh_symbol" style="color: rgb(139, 0, 0);">;</span>

然后now[n']数组 now[i]=lower_bound(a,a+n',init[i])-a+1;

总的复杂度nlgn