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

    关于离散化。

    我在查资料的时候有个讲述离散化的概念的。

    是让在题目不考虑大小关系时候的数据。可以离散化。这是容易理解的。

    通过百度百科。矩阵67大神

    发现那个VOJ(查不到了的感觉)的题目。通过另外一个数组来记录长度宽度。

    我觉得其实也能考虑大小关系。不过是离散化之后的细节处理。

    离散化入门。线段树。POJ 上的2528 在学习HH大神的segment tree的时候。

    离散化初接触。一开始百度文库上的HH大神的文档。感觉就是他举的例子。后面论证不合理似乎没复制全。

    具体的就是

    1-10 1-4 6-10

    1 4 6 10 

    1 2 3 4

    1-4 1-2 3-4

    对于1-4 

    会发现 1-2 3-4 覆盖住了1-4 

    我们理解一个数值是长度1的。而不是坐标。线段树上的定义也是如此。之前做过的种种题目也是如此。另外如果是坐标的数据。

    也可以经过处理变成格子类型的。比如1~10  就是9个格子嘛。1~9 就是了。 经过一番考虑。坐标的只要后面那个坐标值-1 即可了。

    而正是这个区间的定义。并且普通的离散化 不会考虑长度。导致了区间被似乎填满了的问题。

    HH大神的 解决方案是增加点!

    变成1 4 5 6 10

    5是增加的点

    解决了这个问题。

    X[] = 1 4 5 6 10 有什么用呢? X[0] = 1.X[1] =4.X[2]=5。。。

    所以可以输入l r 来根据X 来找出 所对应的离散化的数值来造树。

    离散化:

        大范围数据。可是使用的数据只有几个。把使用的数据离散化映射到0~N上。为什么是0~N? 线段树的性质。来造树即可。

        那么我们代码需要解决的问题就是。首先是离散化的缺陷问题。弥补掉。然后我们弄线段树更新的时候输入一个值 要获得对应的映射值。

        X[i] = 0~N 那么X开的区间还是要很大。 所以必须是X[0~N] = i .才可以。然后输入l r 再bin查找下标即可。

        那么我们可以抽象出一个Bin(int key,int X[],int m) . m为X的大小。返回坐标。

        我们来做区间更新之区间覆盖问题即可。

        

  • 相关阅读:
    我来解数独(附delphi源码)
    jquery(三)
    jquery(二)
    jquery(一)
    前端之JS(五)
    前端之JS(四)
    前端之JS(三)
    前端之JS(二)
    前端之CSS(三)
    前端之CSS(二)
  • 原文地址:https://www.cnblogs.com/Milkor/p/4295898.html
Copyright © 2011-2022 走看看