树状数组主要用于计算区间的和,在区间元素修改值的时候能够快速修改而不是以O(n)的复杂度进行修改;
线段树是把区间以树的形式分拆为若干个小区间,每个小区间存的都有一个值(树状数组的元素存的是区间值),
所以线段树可以快速获得这个区间里面的所有的节点(元素),
主要用于计算每个区间的最大最小元素(也可以快速修改区间元素的值)
RMQ是用数组的形式存储元素的值,用二分的方法进行计算区间的最大最小值,所以他比较快!
但是有个缺点就是每一次修改区间的元素都会影响其最终结果,就是每一次修改都要进行一次RMQ,所以修改的时候很复杂!
所以如果单纯的计算差点问线或者插线问点用树状数组,如果单纯的求固定区间(即区间的元素无修改)的最大最小值用RMQ!
如果既求某一区间的最值且又修改值就用线段树
今天做了几个RMQ的题目还有二分和三分的题目
明天要去姥姥家一趟,不过拿电脑过去,训练时间不变