SPOJ GSS数据结构套题

Posted denverjin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPOJ GSS数据结构套题相关的知识,希望对你有一定的参考价值。

SPOJ GSS1

题意:给一个序列以及一些询问,每个是问([l,r])中最大连续子序列和是多少。

思路:这个问题是以下问题的基础

我们考虑用线段树来解决这个问题。

首先我们来想想如果要求出最大连续子序列和需要什么信息。

对于([l,m))([m,r))这两个区间,我们需要将它们合并成([l,r))这个区间。

那么我们考虑分治地来解决这个问题。把问题分成三部分:

  • ([l,m))中的最大子序列和
  • ([m,r))中的最大子序列和
  • 左端点在([l,m))内,右端点在([m,r))内的最大子序列和。

其中前两个部分可以递归处理,而第(3)个部分则需要记录([l,m))的最大后缀和以及([m,r))的最大前缀和,以便求出此部分的值。所以对每个节点维护([l,r))的和、最大子序列和、最大前缀和、最大后缀和。

将值上推的时候这样做:

  • 首先将([l,r))的和设为([l,m))的和加上([m,r))的和。
  • 然后考虑最大前缀和(最大后缀和与之对称,略):这个最大前缀和的结尾可能有两种情况:
    • ([l,m))中,即([l,m))的最大前缀和
    • ([m,r))中,即([l,m))的和加上([m,r))的最大前缀和
  • 然后最大子序列和就是([l,m))的最大后缀和加上([m,r))的最大前缀和。

然后就好辣。

SPOJ GSS3

题意:给一个序列以及一些询问,每个是(1))(x)这一位上的数改成(v)(2))([l,r])中最大连续子序列和是多少。

思路:这题比GSS1只是多了修改操作,而这只是单点修改,所以直接加上正常线段树的(update)操作即可。

SPOJ GSS5

题意:给一个序列以及一些询问,每个是问(max sum_{k=i}^ja_k(x_1leq ileq y_1,x_2leq jleq y_2,x_1leq x_2,y_1leq y_2))

思路:我们将(y_1)(x_2)的大小情况分两类考虑:

  • (y_1<x_2)时,这两个区间没有任何交叉,所以答案肯定是([x_1,y_1])的最大后缀和加上([y_1+1,x_2-1])的和加上([x_2,y_2])的最大前缀和。
  • (y_1geq x_2)时,这两个区间的交叉是([x_2,y_1])这段,那么我们要分几种情况考虑:
    • (i)([x_1,x_2-1])里,(j)([x_2,y_1])里:([x_1,x_2-1])的最大后缀和加上([x_2,y_1])的最大前缀和。
    • (i)([x_1,x_2-1])里,(j)([y_1+1,y_2])里:([x_1,x_2-1])的最大后缀和加上([x_2,y_1])的和加上([y_1+1,y_2])的最大前缀和。
    • (i)([x_2,y_1])里,(j)([i,y_1])里:([x_2,y_1])的最大连续子序列和。
    • (i)([x_2,y_1])里,(j)([y_1+1,y_2])里:([x_2,y_1])的最大后缀和加上([y_1+1,y_2])的最大前缀和。
  • 然后取(max)就好辣。
SPOJ GSS7

题意:给一棵树以及一些询问,每个是(1))(a ightarrow b)的路径上每一个点都赋成(c)(2))(a ightarrow b)的路径上每一个点组成的序列的最大连续子序列和。

思路:树链剖分都出来了。。。

先看第一个询问。

这个询问还是比较普通的。。。

套个树链剖分的模板做一下就行了,不过线段树中还要加上区间修改的操作。其实也蛮简单的:)

然后我们考虑第二个询问。

首先这个不可以套模板了。。。

最大连续子序列和不是个可以分段搞的东西。。。

然后放弃想了想发现我们可以(O(log^2))地做!!!

首先我们按照正常步骤来把这条路径上所有的重链作为一个个区间,记为(A_{1..m})

然后我们根据(da)树链剖分(le)复杂度(ge)的证明(biao)发现(m)不会超过(O(log n))

所以开心地暴力。。。

枚举区间开头(l),区间结尾(r),那么就是(sum_{i=l+1}^{r-1}A_i)的和加上(A_l)的最大后缀和加上(A_r)的最大前缀和。

还有一种情况就是答案就在(A_i)中,即(A_i)的最大连续子序列和。

搞死我了。。。写了(5K)。。。

以上是关于SPOJ GSS数据结构套题的主要内容,如果未能解决你的问题,请参考以下文章

SPOJ GSS系列(数据结构维护技巧入门)

SPOJ GSS3 线段树系列1

SPOJ - GSS1&&GSS3

SPOJ GSS

SPOJ GSS系列解题报告

spoj gss