2019.4.1 训练情况总结

本文分享了线段树与树状数组在解决特定问题中的应用技巧,包括使用SparseTable算法处理最大值查询、点修改、区间修改等操作,并通过多个实例详细解释了这些数据结构的实现细节。

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

  • 个人训练情况

新生训练mission 7——线段树与树状数组已完成8题(共十题)

 Stat#Title
Solved14 / 17AFrequent values
Solved23 / 34B敌兵布阵
Solved20 / 31CI Hate It
Solved17 / 30DJust a Hook
Solved13 / 34ECount the Colors
Solved9 / 20FCan you answer these queries?
Solved14 / 36GA Simple Problem with Integers
 10 / 11HHelp with Intervals
 7 / 7ICows
Solved3 / 8JCan you answer these queries I
  • 遇到的问题&解决方法

1.第一题“Frequent values”采用ST算法(Sparse Table),其原理为动态规划(难点):        d[i, j]=max(d[i, j-1],d[i+2^(j-1), j-1])

其中d[i, j]表示从i开始,长度为2^{j}的一段数组区间内元素的最大,初始化时d[i,0]分别赋每个元素的值,递推时j从1开始到2^{j}<=区间元素个数;对每个j,i从0开始到i+2^{j}<区间元素个数.

2.之后多题采用线段树,主要操作包括点修改,区间内元素增加相同值,区间内元素改为相同值,查询区间和或最大值,统计特定元素段个数。有点难懂。。

3.第二题“敌兵布阵”和第三题“I Hate It”要求点修改,可遍历至叶节点修改后返回,逐层修改非叶节点至根节点

4.第四题“Just a Hook”要求区间改为相同值,采用懒标记只修改不重合最大区间的值,查询时再下传标记。

5.第五题“Count the Colors”同第四题,区别在于最后一次性下传标记完成统计。

6.第六题“Can you answer these queries?”单点开根,每个点小于2^{63},所以7次开根必为1,此后无需更新。

7.第七题“A Simple Problem with Integers”区间增加相同值,依旧用懒标记,下传标记时默认int型可能溢出,应强制转换为long long型或懒标记数组直接用long long型。。

    tree[a]+=(long long)(mid-l+1)*f[o];
    tree[b]+=(long long)(r-mid)*f[o];

8.第十题“Can you answer these queries I”查询每一个区间的最大连续和,建树时每个节点储存该区间的最大连续和,最大前缀和,最大后缀和,区间值之和。其中最大连续和=max(左子节点最大连续和,右子节点最大连续和,左子节点最大后缀和+右子节点最大前缀和)。查询时至上而下遍历线段树,对每个节点都有四种情况:刚好是查询区间的子区间(直接返回该节点信息),左子节点包括查询区间的子区间(遍历左子节点),右子节点包括查询区间的子区间(遍历右子节点),查询区间的子区间同时在左子节点和右子节点中(左右都遍历)。合并区间过程类似建树过程。。对查询区间的每个子区间合并完成即可得到最大连续和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值