树状数组 区间加 区间求和_(树状数组)逆序对 P1908

(咕咕咕~)

1.愉快的开头

逆序对的通俗定义: 前面有几个数比现在的数大;

为什么要用树状数组:方便求区间和(你说应该用归并?But I am lazy person)

备用知识:离散化Pecco:算法学习笔记(19): 离散化, C数组代表树状数组

read()代表1~i的区间和;

2.解析:

(1):树状数组的功能就是可以单点更新,区间查询,这样你把每个数该在的位置离散化出来,然后每次把每个数该在的位置上加上1(作为数存在的标记);

bcb8283532e47c22bc3330d0ee69d03b.png

(作者的yy理解:若第1~C[i] 的区间和为k(即已标记的数的总和)

但是,i前面的数仍是存在的(所以这些数,不比i位置的数小,只能比它大,这样就形成了一对逆序对);

那么这 i-read(x)= i-k = 到此数新增的逆序对数)

完整代码如下:

#include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值