V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yangkeao
V2EX  ›  问与答

线段树 build 出错

  •  
  •   yangkeao · 2014-07-08 17:09:38 +08:00 · 2589 次点击
    这是一个创建于 3581 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://gist.github.com/VDON/3d976d9a4b96abb1e3d0


    c++

    IDE是Dev-c++
    在执行build第一步的时候就报错。

    实在没看出为什么。。。
    11 条回复    2014-07-09 11:24:34 +08:00
    dingyaguang117
        1
    dingyaguang117  
       2014-07-08 19:23:04 +08:00
    目测你的l,r用的是闭区间吧?
    那么不应该+1吗
    build(cur->lc,l,(l+r)/2);
    build(cur->rc,(l+r)/2 **+1**,r);
    iloahz
        2
    iloahz  
       2014-07-08 20:15:18 +08:00 via iPhone
    @dingyaguang117 lz那里确实是没想清楚,不过单build来看,如果是表示左闭右开也是说得过去的。
    我总觉得是不是编译错啊,18,19行Node后面不用加括号么…sorry手机无法验证
    yangkeao
        3
    yangkeao  
    OP
       2014-07-08 20:35:29 +08:00
    @dingyaguang117 左闭右开
    yangkeao
        4
    yangkeao  
    OP
       2014-07-08 20:37:12 +08:00
    @iloahz 编译没错,单步运行到14行出错
    iloahz
        5
    iloahz  
       2014-07-08 21:45:51 +08:00 via iPhone
    @yangkeao 哦,你的root指针忘了初始化了,60行后面,new一下
    yangkeao
        6
    yangkeao  
    OP
       2014-07-08 21:49:15 +08:00
    @iloahz 额,什么意思?
    ooxxcc
        7
    ooxxcc  
       2014-07-08 21:57:09 +08:00
    @yangkeao 60行,

    Node *cur;

    改成 Node *cur = new Node;

    你的cur指针没有初始化,没有为根节点分配内存
    yangkeao
        8
    yangkeao  
    OP
       2014-07-08 22:01:51 +08:00
    @ooxxcc 哦,我试试
    yangkeao
        9
    yangkeao  
    OP
       2014-07-09 10:33:32 +08:00
    @ooxxcc build的问题解决了。但是change第三次时,在26行出现问题。
    ooxxcc
        10
    ooxxcc  
       2014-07-09 11:19:26 +08:00
    @yangkeao 代码写的太乱静不下心看……
    yangkeao
        11
    yangkeao  
    OP
       2014-07-09 11:24:34 +08:00
    @ooxxcc 可是线段树有没有什么好的写法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3088 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:09 · PVG 08:09 · LAX 17:09 · JFK 20:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.