ACM训练周中总结—10月12日

本文分享了作者在数据结构与算法方面的学习心得,包括树状数组、逆序数求解、线段树应用及最长上升子序列等问题的解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        过去的这个半周主要是在做题,做到了几道我觉得有启发的题,下面就回忆一下吧。

        首先是树状数组H题 

HDU 4267 A Simple Problem With Integers

,就是给了一串数,两种操作,1是找给位上数的值,2是给l到r上,且 (i - l) %k ==0(l<=i<=r)(k<=10)的数加c。在听取了大神的指导后才有了思路,这道题相当于区间更新上加了一个限定条件,由于k的值比较小,可以对每一个k都建立树状数组,同时为了确定给那个位置加数,还要加l%维护模k的余数,这样建立维护a[x][k][l%k],再利用树状数组针对l到r加一下就可以了。

       还顺便水了道逆序数的题C题,给一串数,Q求顺序数对的总个数,R更新将l到r区间中,l位上的放最后,l+1到r的数依次向前推。其实就是输入的时候用一下树状数组求出正序数对的总个数,剩下的区间更新由于更新区间不超过1000位所以暴力操作就可以了。

       线段树的题:16题,Buy Ticket,给n种操作,向区间里面插数(放进第几位的后面),思路很简单,因为最后进去的一定就在那个位置,所以连线操作倒着来,线段树更新给区间有多少空位,尽量向左放。

       另外,小明系列问题—小明序列也印象深刻,就是求最长上升子序列,但又序列之间元素位置的限制d,元素之间间隔d。因为每个位置上的数的值只出现一次,这道题用线段树记录该数值所在的位置为结尾的数可以形成的最长上升子序列(维护区间最大值),依次进行更新,只对dp[i]更新到dp[i-d-1]的位置就可以了,每次查找0到a[i],上最大值+1,因为对线段树只更新i-d-1的位置,所以此时就是间隔d位的最长上升子序列。

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值