算法与数据结构-离散化
在OI竞赛中,当遇到数组的数据范围远远大于数组大小时,就可以使用离散化。
把A[1~N]数组的每一位都对应在[1~N]上的某个数字。当数组中有重复数据时,比较常用的方法就是lower_bound+unique,
这样的话离散化完的数据还是能保留重复的。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=50007; 5 int n,a[maxn],b[maxn]; 6 int main(){ 7 scanf("%d",&n); 8 for (int i=1; i<=n; i++) {scanf("%d",&a[i]); b[i]=a[i];} 9 sort(a+1,a+n+1); 10 int m=unique(a+1,a+n+1)-(a+1); 11 for (int i=1; i<=n; i++) { 12 b[i]=lower_bound(a+1,a+m+1,b[i])-a; 13 printf("%d\n",b[i]); 14 } 15 return 0; 16 }