AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 商店
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

不懂就问



0


https://www.acwing.com/file_system/file/content/whole/index/content/6289686/



提问于13天前
Aaron_wch
10328


1 个问答



1

你初始化线段树分了两步,效率比较低

    build(1,1,n);  // 创建结点
    for(int i=1;i<=n;i++){
        scanf("%d",&d);
        add(1,i,i,d);  // 修改每个节点的sum
    }

这两步可以直接合并成一步,在build里面完成

int a[N];

void build(int u,int l,int r){
    tr[u]={l,r,r-l+1,a[l],0,1};  // 初始化sum
    if(l==r)return;
    int mid=l+r>>1;
    build(u<<1,l,mid);
    build(u<<1|1,mid+1,r);
    pushup(u);   // pushup
}

int main()
{
    ...

    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    build(1,1,n);

    ...

}
回答于13天前
houghstc
39072

好的谢谢 –  Aaron_wch   12天前


我来回答
你确定删除吗?
1024
x

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息