zoukankan      html  css  js  c++  java
  • 离散化

    离散化

    简介

    所谓离散化,一般是指数据范围很大,但是它的实际大小并不是很重要,我们只需要用到它们的相对大小关系。

    或者是有些数本身很大,自身无法作为数组的下标来方便地处理

    实现

    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;
    }
  • 相关阅读:
    图片剪切
    js事件(Event)知识整理
    原生JavaScript事件详解
    underscore源码解析
    win7 vi工具
    开源java数据库库
    win7快捷键
    win7 绿色版MySQL安装与配置
    maven jetty
    javax inect
  • 原文地址:https://www.cnblogs.com/lyp-Bird/p/10539179.html
Copyright © 2011-2022 走看看