暑假集训日记--8.16--练习赛题+树状数组

本文介绍了树状数组的基本概念及其实现方式,包括Add和Sum操作,并探讨了如何利用树状数组高效解决区间查询等问题。

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

今天上午又做了一遍昨天练习赛的A题,一道搜索题,但还是用了不少时间去调试代码。所以别的题也只是看了看。有一道是以前做过的题。感觉改题真的太浪费时间了。。所以要及时做好总结,写代码的时候争取认真注意细节。

下午又开始学新的东西了。上一周学的优先队列,做的几个题感觉都差不多。上一个专题也差一个题AK。看了看题。。感觉太麻烦了。。于是开始看树状数组。

对于树状数组,先是看了看算法竞赛的书上的内容,了解了树状数组的结构以及运用过程。树状数组可以高效的解决一些问题。例如区间的信息的查询等。而其比较主要的两个操作就是Add和Sum操作。

而对于树状数组,也要注意其下标的问题。树状数组用的比较多的还是求某一区间的和。

下面是比较常用的两个Add和Sum的实现方式。

先写一个计算二进制最右边1的代码:

int lowbit(int i)  
{  
    return i&(-i);  
}  

然后Add操作:即令A[i] += v

void add(int i,int v)  
{  
    while(i<=n)  
    {  
        c[i] += v;  
        i += lowbit(i);  
    }  
}  
然后是Sum操作:即求得A[1] + ... + A[i]的和

int Sum(int i)  
{  
    int sum=0;  
    while(i>0)  
    {  
        sum += c[i];  
        i -= lowbit(i);  
    }  
    return sum;  
}  
要注意的问题是刚开始的数组要全部置为0,然后输入A[i]的过程中对C数组进行初始化。

明天还要继续看树状数组的相关内容,然后及时总结树状数组的练习题。用例题来加深对于树状数组的理解。

明天还要继续努力。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值