首页 > 其他 > 详细

软件测试1

时间:2018-03-12 19:26:19      阅读:184      评论:0      收藏:0      [点我收藏+]

void update(int i,int l,int r,int c)

{

    if(tr[i].l==l&&tr[i].r==r)

    {

        tr[i].f=c;

        int len=(tr[i].r-tr[i].l+1);

        tr[i].hash1=fac[0][c][len];

        tr[i].hash2=fac[1][c][len];

        return ;

    }

 

    if(tr[i].f!=-1)

      down(i);

int mid=(tr[i].l+tr[i].r)/2;

 

    if(r<=mid)

    {

       update(i*2,l,r,c);

    }

    else if(l>mid)

    {

       update(i*2+1,l,r,c);

    }

    else

    {

       update(i*2,l,mid,c);

       update(i*2+1,mid+1,r,c);

    }

    tr[i]=up(tr[i],tr[i*2],tr[i*2+1]);

}

 

 

Acm数据结构线段树中的update操作,用于更新节点信息

更新区间 当前节点的区间 容易混淆,曾经有个错是

 int mid=(tr[i].l+tr[i].r)/2; 错写成

   Int mid=(l+r)/2;

 

由于线段树内部过程不太直观,导致了难以查找的错误,最后还是反复的看代码,甚至对比正确的线段树代码来寻找问题。

 

软件测试1

原文:https://www.cnblogs.com/c-czl123/p/8550952.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!