[模板] 树状数组 (C++ class)

本文提供了一个树状数组的C++模板实现,包括初始化、更新、查询等核心功能,并附带了作者的一些个人注释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闲来无事(其实是打了两三道树状数组题),写了个树状数组模板……

 1 /*
 2     Author: hotwords
 3 */
 4 
 5 template<typename tp>
 6 class BinTree {
 7     private:
 8         int n;tp *a;
 9     public:
10         inline int lowbit(int x)const{return x&-x;}
11         int size()const{return n;}
12         void empty() {
13             if(a) delete []a;
14             n=0;a=0;
15         }
16         void clear() {
17             for(int i=1;i<=n;++i) a[i]=0;
18         }
19         void init(int w) {
20             empty();
21             n=w;
22             if(n) {
23                 a=new tp[n+1];
24                 clear();
25             }
26         }
27         void add(int x,tp y) {
28             for(;x<=n;x+=lowbit(x)) a[x]+=y;
29         }
30         tp query(int x) const {
31             tp ans=0;
32             for(;x;x-=lowbit(x)) ans+=a[x];
33             return ans;
34         }
35         tp query(int l,int r) const {
36             return query(r)-query(l-1);
37         }
38         BinTree(){n=0;a=0;}
39         ~BinTree(){empty();}
40 };
[模板] 树状数组

 

转载于:https://www.cnblogs.com/hotwords/p/9043699.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值