离散化
Posted member-re
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了离散化相关的知识,希望对你有一定的参考价值。
# 第一种离散化:重复元素离散值相同 ```cpp const int maxn=1e5+10; int a[maxn], t[maxn], b[maxn]; int n; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",a[i]),t[i]=a[i]; sort(t+1,t+n+1); m=unique(t+1,t+1+n)-t-1;//求出的m为不重复的元素的个数 for(int i=1; i<=n; i++) b[i]=lower_bound(t+1,t+1+m,a[i])-t; //a[i]为原来的数组,b[i]为离散化后的数组 ``` 老是感觉,常数是不是有点大,不知是否有更优的算法 补充一个(这个常数应该小一些): ```cpp struct kkl{ int v,id; }a[MAX]; bool cam(kkl a,kkl b) { return a.v<b.v; } void discrete() { int cnt=0; a[0].v=-1; sort(a+1,a+n+1,cam); for(int i=1;i<=n;i++) { if(a[i].v!=a[i-1].v) t[a[i].id]=cnt+1,cnt++; else t[a[i].id]=cnt; } } ``` 但是这个并不具有普适性
以上是关于离散化的主要内容,如果未能解决你的问题,请参考以下文章