这个专题主要学了两个数据结构 一个是线段树 一个是树状数组
线段树主要求区域操作
建树、单点查询、单点修改、区间查询、区间修改。
代码较为复杂 参考模板
树状数组 用于求和效率很高 进阶则为区域修改同一个值十分方便
主要有两种操作: 单点修改 区域查询(基础) 区域查询的差值即为单点查询 也比枚举算法快很多
区域修改 单点查询 (进阶)
1.敌兵布阵
线段树入门题 但是采用树状数组十分方便
很简单没什么好说的
2.Color the ball
一开始用线段树 debug一个memset一下午
区域修改 单点查询 树状数组秒解
核心: update(a,1);
update(b+1,-1);
3.frosh week
题意:一群人排好队 每个人有自己的序号 (乱序) 只能两辆交换 求最小交换次数使得序号从小到大排序好
学会了逆序数 和冒泡排序的交换次数一样
可以用树状数组来求
归并排序也可以 还没学
4.See you~
管理一个矩阵 里面有书 有四种操作 查询 增加 减少 移动
一开始采用离散化写了很久
原来为二维树状数组
sum(x1,y1)为 矩阵 1,1 x1,y1 的所有元素和
同时 有一个细节是 树状数组的下标不能为0!!!!!!
这题范围为0~n-1 所以所有数据自增1
5.Stars
处理数据的方式很巧妙
因为题目输入是按照y升序排列好的 当y相同时按照x升序 所以 y完全忽略 !!!!!!!
6.MooFest
母牛问题
两个树状数组的应用太厉害了
求次牛到之前所有牛的距离之和值得学习
这题对思维很有启发
7.Matrix
区域修改 单点查询
总的来说这个专题较为简单
继续加油!