第七周训练总结(一)

来源:互联网 发布:淘宝 快递信息录入 编辑:程序博客网 时间:2024/05/02 02:08

这两天时间比较多,做了几道树状数组的题目。

P题:

题意:一群牛参加完牛的节日后都有了不同程度的耳聋,第i头牛听见别人的讲话,别人的音量必须大于v[i],当两头牛i,j交流的时候,交流的最小声音为max{v[i],v[j]}*他们之间的距离。现在有n头牛,求他们之间两两交流最少要的音量和。

解题思路:首先将这n头牛按照v值从小到大排序(后面说的排在谁的前面,都是基于这个排序)。这样,排在后面的牛和排在前面的牛讲话,两两之间所用的音量必定为后面的牛的v值,这样一来才有优化的余地。然后,对于某头牛i来说,只要关心跟排在他前面的牛交流就好了。我们必须快速地求出排在他前面的牛和他之间距离的绝对值之和ans。这里就需要两个树状数组,一个记录比x小的牛的个数sump,一个记录比x小的牛的位置之和sumx,然后,我们可以快速地求出牛i和比牛i位置小的牛的所有距离的绝对值为:sump*a[i].x-sumx;也可以方便地求出比牛i位置大的牛到牛i的距离和,即所有距离-sumx-(i-1-sump)*a[i].x;那么此题就差不多了。此题就用奶牛的坐标作为tree数组的下标,比较容易计算距离。

O题:

题意:有一个矩阵,里面所有数字都是0,有两种操作,c操作,把一个矩形里的数字都取非,q操作,展示某个点的值。
分析:这种状态有限且循环的题是可以记录改变次数,通过次数求解的,所以用二位的树状数组记录改变次数即可。然而,每个点都记录是不行的,可以改变的时候,只更改矩形起点处的改变次数,以及另外三个边界点之后的点的改变次数。这样区域内的点在计算更改次数时通过树状数组的特性就是更改过一次的,而超过区域的在计算的时候与原来相比更改了0或者2次,即为没更改过。

J题:

题意:每朵花给出开放时间,询问某时刻有多少花开。

解题思路:这个题目是区间更新,单点求值,麻烦的是要进行离散化处理,原来我只是对所给的开花时间离散而已,并未对查询的时间也加到一块离散,后来把要查询的时间也一块离散就方便了一些。

 


原创粉丝点击