- 不少问题需要将数据范围很大的一些数 "缩小" 到 1~n 的范围
- 例如 a = [ 100 , -5000 , 20 , 9 , 3 ] 可以离散化到 [ 5 , 1 , 4 , 3 , 2 ]
- 其实也就是把这个数组按照从小到大排后之后的排名
- 又有一种就是数组中含有多项重复的值 a = [ 19 , 19 , 18 , 20 , 20 , 100 , 5] 可以离散化为 [ 3 , 3 , 2 , 4 , 4 , 4 , 5 , 1 ]
- 离散化后的数值非常便于用作下标或者统计 ( 比如链表的下标、技术下标、树状数组、线段树等
常用的离散化代码
int a[10000],b[10000],v[10000]; int n,m; cin>>n; for (int i = 1; i<=n; i++) { cout << a[i]; v[i]=a[i]; } sort(a+1,a+n+1); m=unique(v+1,v+n+1)-v-1; for (int i = 1; i<=n; i++) b[i]=lower_bound(v+1,v+m+1,a[i])-v;标签:10000,int,20,离散,数组,下标 From: https://www.cnblogs.com/lutaoquan/p/17968484