【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_1\leq i\leq y_1,x_2\leq j\leq y_2,x_1\leq x_2,y_1\leq 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_1\geq 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\rightarrow b\)的路径上每一个点都赋成\(c\);\(2)\)问\(a\rightarrow 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\)。。。

原文地址:https://www.cnblogs.com/denverjin/p/10493251.html

时间: 2024-10-20 14:33:20

【SPOJ GSS】数据结构套题的相关文章

2017年8月14日套题记录 | 普及组

写在前面 今天登洛谷发现离Noip剩下88天了??(虽然看起有点久),然后觉得似乎水了一个暑假什么也没做(虽然学了点数据结构和一些奇奇Gaygay的东西),于是打开题库发现去年Long Happy的集训套题我似乎没有提交过,那就一天一套题,顺便码个题解+心得(雾? T2.传作业 题目描述 某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里.由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学.已知某十三与组长之间有N个他熟悉的同学,并

Educational Codeforces Round 15 套题

这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <queue> #include <vector> usi

应试教育:你是在“套题”还是在“解决问题”?

?为什么当初会采用"背题型"的方式? ?"背题型"的局限性在哪? ?建构"知识体系"优势在哪? ?"题海战术"的认知错误 ?学习和考试的本质 声明:此文纯属个人学习方法总结. 1.为什么当初会采用"背题型"的方式? 以前上了高中,由于身边学霸太多,为了急于缩短与他们之间的天壤之别,总想着调整自己的学习方法. 本来自己就没什么学习方法,加上老师布置下做不完的题目,况且时常听到"题海战术"的

SPOJ GSS系列 解题报告

这个系列总共有7道题,目前只做了3道,gss2比较难,gss4是暴力修改,树状数组维护,还没写,gss6和gss7还不在能力范围内. SPOJ_1043 GSS1 题意:给定长度不超过5万的序列,M次查询(貌似没给大小?..),查询所给区间内的最大子段和. 做法:线段树.维护区间和sum,区间可以得到的最大值smax,从区间最左边开始的最大和lmax和右边开始的rmax,然后就可以了.具体更新还是看代码吧.比较巧妙的在于,把query函数的类型设为线段树的节点类型,这样就可以把它的子区间用upd

套题T6

过节(festival.cpp/c/pas) Dxy帮老师们过教师节的时候需要购买礼物.货架上有n 种礼物,每种礼物有不同的个数.每种礼物有价值和花费两种属性,帮他算出最大可以得到的价值.M是带的钱数有多少 Input: 第一行两个数n,m 第2到n+1行:每行三个数a,b,c,表示一种礼物的个数,花费和价值.   Output: 最大可得价值.   样例输入: 1  1 1  1  1   样例输出: 1 a*b(mod.cpp/c/pas) 没错dxy的题目就是这么简单. 输入: 第一行一个

套题T4

Problem 1 无聊的gcd(gcd.c/cpp/pas) 话说出题人不会被查水表吧. 简单的问题描述:从N个正整数里面取出K个数的最大公因数最大是多少.(请将答案乘上k之后输出哦,谢谢合作.) 输入格式 第一行两个正整数N,K. 第二行n个正整数 输出格式 输出一个正整数表示最大的最大公因数. 样例输入 3 1 1 2 3 样例输出 3 数据说明 对于30%的数据,保证k≤n≤20. 对于50%的数据,保证输入中所有数小于5000. 对于100%的数据,保证输入中所有数小于500000,k

[暑假集训]区域赛套题集

2014-07-03 [浙江第11届省赛]ZOJ 3785 What day is that day?  (打表找循环节) [暑假集训]区域赛套题集

套题T5//各种树

树(tree) [题目描述] 方方方种下了三棵树,一年后,第一棵树长出了n个节点. 方方方会向你提出m个询问,每个询问给出两个数i,j,你需要回答i号节点和j号节点在树上的距离. [输入数据] 第一行两个整数n,m.接下来n-1行每行两个整数a,b表示一条边.接下来m行每行两个整数i,j表示询问. [输出数据] m行,每行一个整数表示答案. [样例输入] 3 2 1 2 1 3 3 2 1 1 [样例输出] 2 0 [数据范围] 对于30%的数据,n,m<=1000. 对于100%的数据,n,m

Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛之一了!(其中G.I和D题简直是好题中的好题!) 由于网上没有任何这套题的题解,我每道题都绞尽脑汁想了好久(尤其是D题.I题和H题证明),在此认认真真的写一篇博客,也真心希望好题能被更多的人发现和赞美. 题目概述 题目 思维难度  推荐指数 考点 A 3  ☆☆☆☆ 最长上升子序列 B 暂留坑,>7