• 区间合并问题


    Hotel.
    区间合并问题。
    问题描述:N.N个房间。
    10 6
    1 3
    1 3
    1 3
    1 3
    2 5 5
    1 6

    10个房间
    区间合并:
    这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并

    这句话。真是十分有道理啊。
    tree[] 本身记录的是什么呢? 是该点的最长连续区间的数值。这个定义。不难得出。
    从。当达到这个值 就返回。 这个结果来看的话。可以很快地目测。即是存储最长的区间值。
    PS:我一开始竟然在考虑。实际值1的格子存储的是从这个点开始到后面的区间值。我是忽略了。1-10 这样范围的数值上的定义啊。

    如何实行合并呢?
    弄出三棵树。
    其实是每个节点记录三个值,从该节点左端往右有多少个连续的空位,从该节点右端往左有多少个连续的空位,该区间内最长连续空位长度为多少

    void PushUp(int rt,int m)
    {
    lsum[rt] = lsum[rt<<1]; 该节点 从左往右数区间的最长连续数值 = 左节点的从左往右最长的连续数值。
    rsum[rt] = rsum[rt<<1|1];
    if (lsum[rt] == m - (m >> 1)) lsum[rt] += lsum[rt<<1|1];
    if (rsum[rt] == (m >> 1)) rsum[rt] += rsum[rt<<1];
    //上面是更新该节点的左右区间的信息。
    //下面是更新该节点的最长连续区间的信息。
    msum[rt] = max(lsum[rt<<1|1] + rsum[rt<<1] , max(msum[rt<<1] , msum[rt<<1|1]));
    }

  • 相关阅读:
    《数字图像处理原理与实践(MATLAB版)》一书之代码Part5
    编程算法
    SVM 输出分类概率(python)
    mysql 数据库通过拷贝文件恢复方法
    ubuntu取消自动登录
    迁移mysql数据位置
    No module named 'lsb_release'
    python3 ssl导入失败
    Linux tar: Cannot change ownership to [..]: Permission denied
    树莓派蓝牙
  • 原文地址:https://www.cnblogs.com/Milkor/p/4306552.html
Copyright © 2020-2023  润新知