LA 3839 动态最大连续和(线段树)(训练指南)
2013-04-19 18:45
239 查看
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4146
要求给定区间的最大连续和,主要维护相关信息,prefix最大前缀和,suffix最大后缀和,sum-Max区间最大连续和。
区间的最大连续和=max( max(sum-Max(rt<<1),sum-Max(rt<<1|1)),suffix(rt<<1)+prefix(rt<<1|1)).
参考了这个人的解题报告,详细代码就不贴了
http://blog.csdn.net/c3568/article/details/8573811
主要是利用子结点更新父亲结点。
主要注释:
最大前缀和更新:
最大后缀和更新:
最大连续和更新:
区间查询返回信息(参看上面链接,写的很详细)
要求给定区间的最大连续和,主要维护相关信息,prefix最大前缀和,suffix最大后缀和,sum-Max区间最大连续和。
区间的最大连续和=max( max(sum-Max(rt<<1),sum-Max(rt<<1|1)),suffix(rt<<1)+prefix(rt<<1|1)).
参考了这个人的解题报告,详细代码就不贴了
http://blog.csdn.net/c3568/article/details/8573811
主要是利用子结点更新父亲结点。
主要注释:
struct SegmentTree { LL sum,sum_max,prefix,suffix; int l,r,p,s;///l代表区间最大和的起点,r代表区间最大和的终点,p代表前缀和的终点,s代表后缀和的起点 } f[maxn<<2];
最大前缀和更新:
f[rt].prefix=f[lc].prefix,f[rt].p=f[lc].p; if(f[rt].prefix<f[lc].sum+f[rc].prefix) f[rt].prefix=f[lc].sum+f[rc].prefix,f[rt].p=f[rc].p;
最大后缀和更新:
f[rt].suffix=f[rc].suffix,f[rt].s=f[rc].s; if(f[rt].suffix<=f[lc].suffix+f[rc].sum)///要x,y都尽可能的小,所以加等号 f[rt].suffix=f[lc].suffix+f[rc].sum,f[rt].s=f[lc].s;
最大连续和更新:
if(f[lc].sum_max>=f[rc].sum_max) f[rt].sum_max=f[lc].sum_max,f[rt].l=f[lc].l,f[rt].r=f[lc].r; else f[rt].sum_max=f[rc].sum_max,f[rt].l=f[rc].l,f[rt].r=f[rc].r; LL a=f[rt].sum_max,b=f[lc].suffix+f[rc].prefix; if(b>a||(a==b&&f[rt].l>f[lc].s)||(a==b&&f[rt].l==f[lc].s&&f[rt].r>f[rc].p)) f[rt].sum_max=b,f[rt].l=f[lc].s,f[rt].r=f[rc].p;
区间查询返回信息(参看上面链接,写的很详细)
相关文章推荐
- LA 3938 动态最大连续和 线段树
- 线段树,分治法(动态最大连续和,LA 3938)
- LA 3938 动态最大连续和(线段树)
- [线段树点修改]动态最大连续和(Ray,Pass me the Dishes, LA 3938)
- UVa 1400(LA 3938)动态最大连续和
- LA3938 线段树 动态求区间最大连续和
- 《算法竞赛-训练指南》第一章-1.24_pre-一维数组最大连续和
- UVaLive 3938 "Ray, Pass me the dishes!" (线段树求动态最大连续和)
- UVALive - 3938 Ray, Pass methe dishes!"(动态最大连续和子序列,线段树区间合并)
- LA 3938 动态最大连续和
- LA3938-Ray, Pass me the dishes!--动态最大连续区间和(线段树+前后缀数和组)
- poj2750-Potted Flower-动态求最大连续环区间和(线段树上分治+set维护)
- tyvj 1427 小白逛公园(线段树中级,单点修改,动态最大连续和)
- 算法竞赛入门经典:第八章 高效算法设计 8.1动态规划之最大连续和
- 《算法竞赛-训练指南》第一章-1.12_LA 3971
- [Bzoj5358][Lydsy1805月赛]口算训练(预处理+动态开点线段树)
- 《算法竞赛-训练指南》第一章-1.20_LA 3905
- 利用动态规划求连续数组最大和以及最大子矩阵的和
- spoj 1716...动态区间的最大连续子段和问题...点修改...
- 《算法竞赛-训练指南》第二章-2.27_LA 5009