【模板】離散化

 使用STL算法離散化: 
思路:先排序,再刪除重複元素,然後就是索引元素離散化後對應的值。 
假定待離散化的序列爲a[n],b[n]是序列a[n]的一個副本,則對應以上三步爲:

sort(sub_a,sub_a+n);
int size=unique(sub_a,sub_a+n)-sub_a;//size爲離散化後元素個數
for(i=0;i<n;i++)
a[i]=lower_bound(sub_a,sub_a+size,a[i])-sub_a + 1;

 

經離散化後對應的值  

對於第3步,若離散化後序列爲0, 1, 2, ..., size - 1則用lower_bound,從1, 2, 3, ..., size則用upper_bound,其中lower_bound返回第1個不小於b[i]的值的指針,而upper_bound返回第1個大於b[i]的值的指針,當然在這個題中也可以用lower_bound然後再加1得到與upper_bound相同結果,兩者都是針對以排好序列。使用STL離散化大大減少了代碼量且結構相當清晰。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章