离散化
离散化
简介
所谓离散化,一般是指数据范围很大,但是它的实际大小并不是很重要,我们只需要用到它们的相对大小关系。
或者是有些数本身很大,自身无法作为数组的下标来方便地处理
实现
C++ 离散化有现成的 STL 算法:
vector<int>a,b; std::sort(a.begin(),a.end()); V.erase(std::unique(a.begin(),a.end(),a.end())); for(int i=0;i<=n;i++) b[i] = std::lower_bound(a.begin(),a.end(),b[i]) - a.begin();
再贴一下自己手写的:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll a[10086666],b[10086666]; ll n,len; int main() { scanf("%lld",&n); for(ll i=1;i<=n;i++) { scanf("%lld",&a[i]); b[i] = a[i]; } sort(b + 1,b + n + 1); len = unique(b+1,b+n+1) - b - 1; for(int i=1;i<=n;i++) a[i] = lower_bound(b + 1,b + len + 1,a[i]) - b; for(int i=1;i<=n;i++) printf("%lld ",a[i]); return 0; }