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的大小。返回坐标。

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

        

  • 相关阅读:
    BZOJ2821 作诗(Poetize) 【分块】
    BZOJ2724 蒲公英 【分块】
    Codeforces 17E Palisection 【Manacher】
    BZOJ2565 最长双回文串 【Manacher】
    Codeforces 25E Test 【Hash】
    CODEVS3013 单词背诵 【Hash】【MAP】
    HDU2825 Wireless Password 【AC自动机】【状压DP】
    HDU2896 病毒侵袭 【AC自动机】
    HDU3065 病毒侵袭持续中【AC自动机】
    HDU2222 Keywords Search 【AC自动机】
  • 原文地址:https://www.cnblogs.com/Milkor/p/4295898.html
Copyright © 2011-2022 走看看