离散化

原来一直不懂的东西呢…
后来发现也没什么,只要是专心去学习是可以搞明白的
百度百科的解释非常全面
离散化是将无限空间中有限的个体映射到有限的空间中去
具体来说就是,你需要一堆数据的相对大小,而不是绝对大小,就可以用离散化,把数据范围很大,但是数据数量很少的几个数放到一个小数组里,并且是一种映射关系

形象点,就是一个范围很大很大的数组里只有几个数,那剩下那些没有写入数据的内存不都浪费掉了吗?
这时候用离散化处理出那几个数,放到一个小数组里,就可以省时间省空间

实现

用两个元素的结构体,保存数值val和读入的次序order
读完啦之后,依据val进行排序,由于用结构体保存了order,排序后val和order依然一一对应

struct Node{
int val, order;
}node[maxn];

这时候开一个for循环和一个r数组,从1到n循环这些数字,把for循环次序赋值给这些val原来的位置,这样就没有改变原数列中的次序关系

for(int i=1; i<=n; i++) {
    if(i==1 || a[i] != a[i-1]) { //去重
        r[node[i].order] = i;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值