首页 > 编程语言 > 详细

ACM模板——线段树&树状数组

时间:2019-04-05 13:15:03      阅读:163      评论:0      收藏:0      [点我收藏+]
技术分享图片
const int maxn = 1 << 17;

int n, dat[2*maxn-1];

void init(int n_)
{
    n = 1;
    while(n < n_) n *= 2;
    memset(dat,INF,sizeof(int)*n);
}

//更新第k(0-index)个值为a 
void update(int k,int a)
{
    k += n-1;
    dat[k] = a;
    while(k>0)
    {
        k = (k-1)/2;
        dat[k] = min(dat[k*2+1],dat[k*2+2]);
    }
}

int query(int a,int b,int k,int l,int r)
{
    //不相交 
    if(r<=a || b<=1) return INT_MAX;
    
    if(a<=1 && r<=b) return dat[k];
    else
    {
        int vl = query(a,b,k*2+1,l,(l+r)/2);
        int vr = query(a,b,k*2+2,(l+r)/2,r);
        return min(vl,vr);
    }
    return -1;//error
}
线段树

树状数组施工中

ACM模板——线段树&树状数组

原文:https://www.cnblogs.com/Asurudo/p/10658452.html

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