树状数组——求逆序对个数(初学者都能看懂)

本文从初学者的角度详细解释如何使用树状数组求逆序对,先介绍了树状数组的基础操作,包括求lowbit、单点更新和区间查询。接着通过实例解析逆序对的原理,并将其转化为树状数组问题。最后讨论了离散化和排序优化,以降低时间复杂度。
摘要由CSDN通过智能技术生成

在网上翻看了一些博客,感觉大体对于树状数组求逆序对的讲解不够详细,那些博客,更多像是给已经学会逆序对的人复习用的。而初学者,可能要冥思苦想。接下来,我便从一个初学者的角度,来一步步的,讲解一下由树状数组求逆序对。需要的前置知识只有,会线段数组的基本应用。单点更新,区间查询,求lowbit。
先贴树状数组的基本代码。
求lowbit

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

单点更新

void update(int x,int y,int n){
   
    for(int i=x;i<=n;i+=lowbit(i))    //x为更新的位置,y为更新时增加的数,n为数组最大值
        c[i] += y;
}

区间查询

int getsum(int x){
   
    int ans =
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值