今天还是以看树状数组的博客,感觉好几篇比较难,看的比较慢。另外还试着独立写了几道水题练习,还是比较菜。
以下是我自己的理解:树状数组是一种主要就是为了节省时间降低复杂度的工具,它既可以快速算出前i项的和,也可以快速算出某区间段满足条件的元素个数,同时可以实现随着元素的改变而改变。
今天水的其中一题,给一个一维数组A[],找出满足条件的子列,a<b<c<d,且Aa<Ab,Ac<Ad。这道题如果用暴力解法要是绝对超时的。而这道题就是dp+树状数组,遍历整个数组a[n],令a[i]为c,找出c右边有多少比a[i]大的,找出a[i]左有多少Aa<Ab的情况,相乘,最后全部累加就是ac了,这时树状数组可以作为记录a[i]分别左有多少比a[i]小的数组。可省大量时间。
至今我所看到的题树状数组都是以一种辅助工具出现的,往往是什么什么+树状数组的形式。