利用C++的STL实现离散化
因为以前一直是手写实在太丑,所以总结了一下STL离散化的方法。
大体分为:
①将序列复制一份,并排序
②利用unique去重
③枚举原数组,利用lower_bound在排好序的数组中找位置
④具体操作会涉及到STL迭代器的基本使用,详见STL的使用方法(其实就是一点地址使用的常识)
#include<cstdio>
#include<algorithm>
#define maxn 10039
using namespace std;
int n, a[maxn], b[maxn];
int main(){
scanf("%d", &n);
for(int i = 1; i < n+1; i++){
scanf("%d", a+i);
b[i] = a[i]; //复制一份
}
sort(b+1, b+1+n);
int e = unique(b+1, b+1+n)-b-1; //去重并得到去重后的个数
for(int i = 1; i < n+1; i++)a[i] = lower_bound(b+1, b+1+e, a[i])-b;
for(int i = 1; i < n+1; i++)printf("%d ", a[i]);
return 0;
}