ACM集训日记-8月18日

    今天一整天就看树状数组了,有点抽象确实是很难懂,第一道入门题就是敌兵布阵,这道题只是简单的用树状数组来存储,把每个兵营的人数存在树状数组中,这道题用树状数组的好处就是看到了树状数组的及时更新的特点,每次更改数组中的某个数,会刷新整个数组的值,这是以前数组所不能做到的,这道题就是调用了树状数组的基本操作add和sum就能解决,而且时间复杂度会比一遍一遍的遍历要快,求区间和的时候用的是sum(i)-sum(j-1),由于sum的特性返回的是从1到i的和,j-1就会比较关键。虽然题目比较复杂,但是只要理解树状数组的基本操作就能解决,如果没学过就比较麻烦啦。

    今天看到的第二道比较妙的题就是树状数组中的单点更新,就是乒乓这道题,一队人,每个人的能力值都不同,然后要有三个人打比赛,其中一个人当裁判,并且两外两个人的能力值一个要比他高,一个要比他低,要求的是对任意一个i裁判,他能组织多少场比赛。对于这一队人来说每个人的排序跟能力值无关,需要确定的是在这个人的左边有几个人比他能力值低,从而就能知道在他左边比他高的人数,在他右边也就同理了,关键就是如何求在他左边比他能力值低的人数,巧妙地地方就在这里,令X[n]作为标记数组,假设当前我们扫描到了第i个点,此时如果X[y]==1,那么表示第i个点左边出现了一个a[k]==y的值且k<i。那么这时,我们只要用树状数组计算X[n]数组中区间[1, a[i]-1]的和即可,我试着在纸上验算了一边几个数,行得通,这样树状数组也就能建立了。

    明天就要网赛了,有点小紧张呢,加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值