这个专题主要学了两个数据结构 一个是线段树 一个是树状数组

线段树主要求区域操作

建树、单点查询、单点修改、区间查询、区间修改。

代码较为复杂 参考模板

 

树状数组  用于求和效率很高 进阶则为区域修改同一个值十分方便

主要有两种操作: 单点修改 区域查询(基础)  区域查询的差值即为单点查询   也比枚举算法快很多

                          区域修改  单点查询 (进阶)

 

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

区域修改 单点查询

 

总的来说这个专题较为简单

继续加油!