应用中,线段树是一个工具
一个能快速完成查询,修改,的工具!
你的任务(题目描述)就是线段树上的权值
处理任务的方法就是线段树修改的方法
前缀和不能支持动态修改(因为这样修改每次都要把其以后所有的数组修改),所以对于此类问题使用线段树或树状数组
离散化的目的:一串数很大,且可能有小数
处理套路:
1.每个区间需要记哪些值
2.需要哪些标记
3.如何叠加标记(在已有标记的区间上增加新的标记)
4.如何应用标记(标记上记录的修改如何应用到区间上)
5.如何合并区间(用两个子区间上记录的值计算出本区间的值)
线段树所记录的:次数
例:
问题:求区间和,修改区间和
1.记区间和
2.记区间加(tag)
3.累加(结合律)
4.一个区间加上一个数=区间长度x这个数
5.sum[o]=sum[o<<1]+sum[o<<|1]
线段树的应用:
1.满足结合律(加减,异或和,区域最值)
2.满足运算的速度够快,(如阶数的矩阵乘法就不可以)
树状数组:
1.
+lowbit不断向上找点,-lowbit不断向下找点
树状数组求逆序对
1.离散化