离散化

关于离散化。

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

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

通过百度百科。矩阵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的大小。返回坐标。

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

    

posted @ 2015-02-18 19:26  Milkor  阅读(336)  评论(0编辑  收藏  举报