2017暑假训练第十六天

  今天继续理解树状数组的内容,也是边看边写吧。

  首先是这道题:

 

POJ 3378 Crazy Thairs(数据集中+DP+树状数组+高精度)

http://poj.org/problem?id=3378

题意:

        有一个N个数组成的数列,问你该数列中有多少上升5元序列,即满足如下要求的序列(不要求连续取5个A):

        1 ≤ i < j < k < l < m N
        Ai < Aj < Ak < Al < Am

  这道题是树状数组和其他的算法相结合的用法,这个题目主要是利用了树状数组优化了dp算法的两个方面:

  第一,运用离散化方法,优化了数据,缩小了数组的范围,防止mle的出现。

  第二,运用树状数组求和的方式,优化了求和的速度,减少了tle的可能性。

  但是这种优化要求对于树状数组的用法了解比较深刻,不然很难应用到其他的算法中去。

  到现在为止,完整的看完了饶齐的博客中有关树状数组的内容,总结一下树状数组目前出现的几种用法,有:

  第一类:最基本的单点更新,区间求和--敌兵布阵。

  第二类:求逆序数,这种题一般不会直接告诉你要求逆序数,而是需要一定的逻辑推理,如此,了解树状数组也需要对高代知识甚为了解。

  第三类: 优化其他的算法,比如dp,也是求和问题,可以优化时间。

  而相对于树状数组自身也有他的优化,那就是离散化处理,可以把数据集中到很小的范围内,在进行操作就会使得占用的空间缩小。

  接下来看qscqesze的博客,前面几道题和饶齐写的基本相同,说明这也都是树状数组的经典题目和用法。

  1112 - Curious Robin Hood

   这道题又是最基础的单点更新,区间查询的题目,这道题之所以要提一下是因为两点:

   第一,数据方面,这道题的点集是从0-n-1的,所以使用树状数组的时候需要对数据进行++处理。

   第二,这道题告诉了我求单点的方法:sum(x)-sum(x-1),之前看过一个二维的题目,自己做的时候一直想不出来怎么表示单点,于是又另外开了一个存单点的数组。经过这个题目,现在明白了,求二维单点的方法就是:

   sum(x,y)+sum(x-1,y-1)-sum(x-1,y)-sum(x,y-1);

   这个想法是根据树状数组的含义以及图形得知的。

  

 

   下午打了一场比赛,团队赛,我自己出了两道题(其实是三道,但最后一道出的时候刚刚结束,主要是题意理解失误导致浪费了大量的时间),做出来的三道题有一道最短路径,一道树状数组,一道假贪心,队友出了一道题,赛后补题一道,这个单调队列的题,很简单,但是当时并没有发现,有些无用的输入。

  这次比赛反应出来很多问题,首先,就是scanf使用不太熟练,有些遗漏,还有一点就是题意看的不准确。可能是长时间不打团体赛,配合也有些弱了。不过又找回来了打比赛做题的快感,比自己做心情激动而且有动力的多。

  明天的训练将继续看树状数组的博客,准备后天的比赛(发现树状数组真的是个好东西,学了之后就特别想用)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值