在一些问题中,我们只会关心某个数字的相对位置,而不会去关心它们具体是多大。
对于这种类型的题目,我们需要对数据进行离散化。
离散化是一种映射的过程,过程中我们要获得所有数字的具体排名。
举个栗子
数组 1,23424,21472313246768,6594,95,0,65535313
离散化后 1,4,6,3,2,0,5
1 for(register int i=1;i<=n;++i) 2 scanf("%d",&num[i]) , f[i]=num[i]; 3 sort(f+1,f+n+1); 4 int m=unique(f+1,f+n+1)-f-1; 5 for(register int i=1;i<=n;++i) 6 num[i]=lower_bound(f+1,f+m+1,num[i])-f; 7 for(register int i=1;i<=n;++i) 8 printf("%d ",num[i]);