(咕咕咕~)
1.愉快的开头
逆序对的通俗定义: 前面有几个数比现在的数大;
为什么要用树状数组:方便求区间和(你说应该用归并?But I am lazy person)
备用知识:离散化Pecco:算法学习笔记(19): 离散化, C数组代表树状数组
read()代表1~i的区间和;
2.解析:
(1):树状数组的功能就是可以单点更新,区间查询,这样你把每个数该在的位置离散化出来,然后每次把每个数该在的位置上加上1(作为数存在的标记);
(作者的yy理解:若第1~C[i] 的区间和为k(即已标记的数的总和)
但是,i前面的数仍是存在的(所以这些数,不比i位置的数小,只能比它大,这样就形成了一对逆序对);
那么这 i-read(x)= i-k = 到此数新增的逆序对数)
完整代码如下:
#include