离散化

当输入数据跨度大,但是比较稀疏时,就没有必要开几万几百万的数组,可以用离散化求得其相对位置,以节省资源,提高效率。

 1 #include <cstdio>
 2 #include <algorithm>
 3 
 4 using namespace std;
 5 
 6 int n, a[maxn], mp[maxn];
 7 
 8 inline void discretize() {
 9     for (int i = 1; i <= n; ++i)
10         mp[i] = a[i]; //先将原序列复制到mp数组
11     sort(mp + 1, mp + n + 1);
12     mp[0] = unique(mp + 1, mp + n + 1) - mp - 1;
13     //对mp数组排序并去重
14     for (int i = 1; i <= n; ++i)
15         a[i] = lower_bound(mp + 1, mp + mp[0] + 1, a[i]) - mp;
16         //将a数组更新成初始元素的相对大小
17 }

 

posted @ 2017-08-01 15:28  Mr^Kevin  阅读(207)  评论(0编辑  收藏  举报