数状数组
介绍
树状数组主要操作为lowbit函数(取出x元素的低位二次幂)方便用于爬链操作(每层子节点通过加上低位二次幂可到达父节点),以及求前缀序列和的操作(将x减去其低位二次幂可得到前一未覆盖序列,通过累加从而达到求前缀和的操作)。
点击查看代码
int lowbit(int x)
{return x&-x;}
适用范围:
1.点修+区查
直接对点进行操作,而后进行爬链操作,在爬链的过程中对父序列进行修改,从而便于区查。
2.区修+点查
用树状数组维护区修的操作,即树状数组中的节点维护差分后的值,在进行点查时,至今查询前一段序列,并进行累加即可得到答案。
3.求逆序对。
输入数据时,对数据的位置进行记录。用树状数组来维护逆序对的个数,先对数据进行排序(从大到小排序,若值相同则按位置从大到小排序),遍历排序后的每个数,询问该数位置pos-1的数字总数,并累加上答案中,而后将其对该位置的贡献加1,进行爬链操作。
4.

浙公网安备 33010602011771号