离散化
今日做题时,偶遇巨大数据,拼尽全力无法ac,才明白用map离散化被卡了,看来是不得不学一下了。
map实现离散化
map基于红黑树实现,每次查询是O(logn)的,因此被卡掉了,不多说了。
STL实现离散化
只需三步轻松实现。
(1)sort函数排序
(2)unique函数去重
(3)二分索引(lower_bound()函数)
sort(b+1,b+1+tot); //第一步:排序
res=unique(b+1,b+1+tot)-(b+1); //unique函数计算出去重后的元素个数,存在res中
for(register int i=1;i<=n;i++) {
a[i]=lower_bound(b+1,b+1+res,a[i])-b; //lower_bound函数进行索引
}
return 0;
}
哈希表实现离散化
哈希表如果构造得好可以实现接近O(1)查询,后面再开一篇写哈希表。