SPOJ GSS3 (区间最大子段和 + 单点更新) (线段树)

线段树求区间内最大子段和+各种做法比较(模板例题:Can you answer these queries III--SPOJ - GSS3) 问题: 求一个序列的最大子段和即最大连续子序列之和,并可以实现单点修改。 刚拿到这个问题时,没想到用线段树,之前也做过类似的题目,先来分析一波,不用线段树的做法: 一、暴力求解: 时间复杂度最高 O(n3); int maxsum(int *a,int n) { int sum,ma; sum=ma= 0; int i,j,k; for(i=0;i<n;i++... 阅读详情

题目

思路

详细思路移步GSS1这里只是加入了一个单点更新得操作,找到要更新得顶点,然后把它更改,再递归调用回溯的时候维护区间特征值
End E n d

代码

struct Node{
    int l, r;
    int sum, maxs, maxl, maxr;  //区间和, 区间最大子段和, 最大前缀和, 最大后缀和
}tree[maxn<<2];
int num[maxn];               //数值数组

void build(int i, int l, int r){
    tree[i].l = l;
    tree[i].r = r;
    if(l == r){
        tree[i].sum  = num[l];
        tree[i].maxs = num[l];
        tree[i].maxl = num[l];
        tree[i].maxr = num[l];
        return ;
    }

    int mid = (l+r)>>1;
    build(i<<1, l, mid);
    build(i<<1|1, mid+1, r);    //子树建树后更新特征值

    tree[i].sum  = tree[i<<1].sum + tree[i<<1|1].sum;
    tree[i].maxs = max(max(tree[i<<1].maxs, tree[i<<1|1].maxs), tree[i<<1].maxr+tree[i<<1|1].maxl);
    tree[i].maxl = max(tree[i<<1].maxl, tree[i<<1].sum+tree[i<<1|1].maxl);
    tree[i].maxr = max(tree[i<<1|1].maxr, tree[i<<1|1].sum+tree[i<<1].maxr);

    return ;
}

Node query(int i, int l, int r){
    if(tree[i].l==l && tree[i].r==r)
        return tree[i];

    int mid = (tree[i].l+tree[i].r)>>1;
    if(mid >= r)
        return query(i<<1, l, r);
    else if(mid < l)
        return query(i<<1|1, l, r);
    else {
        Node ls = query(i, l, mid);
        Node rs = query(i, mid+1, r);

        ls.maxs = max(max(ls.maxs, rs.maxs), ls.maxr+rs.maxl);
        ls.maxl = max(ls.maxl, ls.sum+rs.maxl);
        ls.maxr = max(rs.maxr, rs.sum+ls.maxr);
        ls.sum  = ls.sum + rs.sum;

        return ls;
    }
}

void update(int i, int x, int k){
    if(tree[i].l == tree[i].r){
        tree[i].sum  = k;
        tree[i].maxs = k;
        tree[i].maxl = k;
        tree[i].maxr = k;
        return ;
    }

    int mid = (tree[i].l+tree[i].r)>>1;
    if(x<=mid) update(i<<1, x, k);
    else update(i<<1|1, x, k);

    tree[i].sum  = tree[i<<1].sum + tree[i<<1|1].sum;
    tree[i].maxs = max(max(tree[i<<1].maxs, tree[i<<1|1].maxs), tree[i<<1].maxr+tree[i<<1|1].maxl);
    tree[i].maxl = max(tree[i<<1].maxl, tree[i<<1].sum+tree[i<<1|1].maxl);
    tree[i].maxr = max(tree[i<<1|1].maxr, tree[i<<1|1].sum+tree[i<<1].maxr);
}

int main()
{
    int n, m;
    sd(n);
    rep(i, 1, n+1)
        sd(num[i]);

    build(1, 1, n);
    sd(m);
    rep(i, 0, m) {
        int op, l, r;
        sddd(op, l, r);
        if(op == 0) update(1, l, r);
        else if(op == 1) {
            Node ans = query(1, l, r);
            printf("%d\n", ans.maxs);
        }
    }

    return 0;
}
深入解析UEFI PEI阶段:PeiCore的三次调用与内存管理机制 本文深入解析UEFI启动流程中的PEI阶段,重点探讨PeiCore的三次调用与内存管理机制。详细介绍了PeiCore在临时内存中的初始化、堆栈切换至永久内存的过程,以及最终交接给DXE阶段的关键步骤,为开发者提供调试技巧与实战案例,助力解决UEFI启动问题。 阅读详情

相关推荐

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)

在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。

darcsdn 2128

SPOJ - GSS3【线段树】【单点修改维护最大连续和】

struct node { ll lson,rson; ll sum,dat,lm,rm; }t[mx<<2]; sumsumsum表示区间和 lmlmlm表示与左端点连续的最大连续和 rmrmrm表示与右端点连续的最大连续和 datdatdat表示区间内的最大连续和 转移公示: sum[p]=sum[lson]+sum[rson]sum[p]=sum[lson]+sum[rson]sum[p]=sum[lson]+sum[rson] lm[p]=max(lm[lson],sum[lson

Yucohny 523

实战指南:基于ELK与Grafana构建天融信防火墙日志可视化看板

本文详细介绍了如何基于ELK与Grafana构建天融信防火墙日志可视化看板,包括环境准备、日志收集与解析配置、Elasticsearch存储优化、Grafana看板设计等关键步骤。通过实战案例和优化技巧,帮助用户高效处理天融信防火墙日志,实现安全态势的可视化监控与分析。

weixin_34246529的博客 226

线段树与区间最大子段和问题,这一篇就够了

1、经典的区间最大子段和问题 问题描述:给定一个序列a1,a2,a3,..ana_1,a_2, a_3,..a_na1​,a2​,a3​,..an​,如何求出该序列的最大子段和?(询问的区间个数为mmm) 解决方案: - 暴力统计:对于每一个区间[l,r][l,r][l,r],每一次选定一个子段的起点,然后枚举子段的长度,算法复杂度为O(mn2)O(mn^2)O(mn2)。 - 动态规划:我们一次性算出所有的区间的最大子段和,然后使用直接询问答案。我们规定: - ls\color{Green}lsls

m0_51156601的博客 6972

ros2 humble中使用realsense t265与d435

前提,安装realsense SDK 2.51.1版本并且能成功启动realsense-viewer V2.51.1想要在ros2中使用realsense t265,必须配合realsense SDK v2.51.1使用realsense-ros 4.51.1版本,因为新版本realsense ros2不再对t265支持下面记录源码编译安装 realsense-ros 4.51.1版本。

m0_72797388的博客 952

SAP 屏幕增强:客户商主数据屏幕增强(KNA1、KNB1、KNVV)

本文介绍了SAP系统中针对客户主数据(KNA1、KNB1、KNVV)进行屏幕增强的具体实现方法。主要内容包括:1)在SPRO配置中创建新条目;2)通过SE80创建函数组和程序(LZKNA1TOP等);3)设置子屏幕9001并添加自定义结构字段;4)利用BADI(CUSTOMER_ADD_DATA等)实现数据交互逻辑。文章分别详细说明了针对客户主数据的一般数据(KNA1)、公司代码数据(KNB1)和销售数据(KNVV)三类不同数据的增强配置步骤,包括函数模块创建、屏幕设置和BADI方法调用等关键技术点。

SAP ABAP开发技能记录分享 1616

SPOJ-GSS3- Can you answer these queries III(单点修改+最大字段和)

题目链接:https://vjudge.net/problem/SPOJ-GSS3 Can you answer these queries III You are given a sequence A of N (N <= 50000) integers between -10000 and 10000. On this sequence you have to apply M (M ...

From now on...的Blogs 286

从零完成 STM32 + ESP-01S + 云服务器 TCP 通信测试

STM32 通过 USART3 控制 ESP-01S 接入手机 2.4 GHz 热点,随后连接公网云服务器 8.152.204.86:9002。云端在同一 TCP 连接中连续收到 seq=1~6 的测试报文,5 个发送间隔平均约 5.4 秒,说明本次 TCP 上行链路已经打通。

weixin_51387720的博客 311

线段树统计序列问题(最大子段和/最长上升段/最长括号匹配)

首先,从变成这幅模样开始,我就从没想过能够轻松地死去。 ——《家庭教师HITMAN REBORN!》Reborn

xhyu61的博客 524

倍福--TwinSAFE功能块的使用

在安全模块的程序设计中,输入变量取反,或者把PLC的变量连接到安全的功能块程序中, 操作流程 1.1. 功能块输出取反 例如修改IN,右击属性,然后可在Single-Channel选项中选择是NO还是NC的输入信号。 1.2. PLC标准变量作为安全程序的输入 1.2.1. 建立两个PLC变量 1.2.2. 安全程序区创建变量 1.2.3. 功能块变量链接 首先,PLC变量不能直接连到Estop功能块的输入变量中,否则会报错,但PLC可以连接到SafeAnd这些功能块,然后再转出来,如下所示

weixin_41883890的博客 5311

MATLAB基础应用精讲-【数模应用】游程检验(附MATLAB、R语言和python代码实现)

游程检验是一种非参数性统计假设的检验方法,它是游程总数检验和最大游程检验的总称,用于两个独立样本的比较和观测结果随机性的检验测试。​游程检验亦称“连贯检验”,是根据样本标志表现排列所形成的游程的多少进行判断的检验方法。[2]例1:设某样本n=12人的标志表现为男、女,有以下三种排列。(i) 男\男,女\女\女,男,女\女,男\男\男\男;(ii) 男\男\男\男\男\男\男,女\女\女\女\女;(iii) 男,女,男,女,男,女,男,女,男,女,男\男;连续出现男或女的区段称为游程。

qq_36130719的博客 608

SPOJ GSS3 (动态dp)

题意 题目链接 Sol 这题可以动态dp做。 设\(f[i]\)表示以\(i\)为结尾的最大子段和,\(g[i]\)表示\(1-i\)的最大子段和 那么 \(f[i] = max(f[i - 1] + a[i], a[i])\) \(g[i] = max(g[i - 1], f[i])\) 发现只跟前一项有关,而且\(g[i]从\)f[i]$转移过来的那一项可以直接拆开 那么构造矩阵 \[ \be...

weixin_30950237的博客 160

31、贝叶斯认知建模与隐马尔可夫模型:理论与应用

本文探讨了贝叶斯认知建模与隐马尔可夫模型(HMM)的理论基础及其在认知科学和神经科学中的应用。重点介绍了贝叶斯定理和HMM的基本原理,并结合实际案例,如情绪识别系统和脑机接口(BCI),展示了它们在处理复杂认知任务中的强大能力。文章还讨论了贝叶斯-HMM模型的技术细节、优势与局限性,以及未来的发展前景。

meat5的博客 141

【线段树求区间最大连续子段和+单点更新】 SPOJ - GSS3 Can you answer these queries III

Can you answer these queries III SPOJ - GSS3 You are given a sequence A of N (N <= 50000) integers between -10000 and 10000. On this sequence you have to apply M (M <= 50000) operations:...

qq_41037114的博客 253

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【挖坑】【GSS系列】GSS3:带单点修改的区间最大子段和

Can you answer these queries? ​ GSS系列是spoj出品的一套数据结构好毒瘤题,主要以线段树、平衡树和树链剖分为背景,进行了一些操作的魔改,使得难度远超模板题,但对于思维有极大的提升。 ​ 所以我会选择一些在我能力范围内的题挖坑选讲,构成一个GSS系列。至于剩下那些,等我成为巨佬弄懂了再说吧。 GSS3:带单点修改的区间最大子段和 ​ 本文有前置芝士:GSS1。...

Fighter的博客 565

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SPOJ GSS1 (区间最大子段和)(线段树)

想要补camp里的那道区间最大k子段和,结果发现自己连怎么求区间最大字段和都不会。。。菜是原罪,于是找了GSS来补一下(虽然我连GSS是什么都不知道hhh 题目 题意 给一个长度为nnn的序列,mmm次查询,每次查询一个区间[l,r][l,r][l,r]中的最大子段和(要求为连续子序列)。 思路 对于一个固定区间,求最大子段和我们有O(n)O(n)O\left(n\right)的...

ShadowGhostH的博客 1270

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SPOJ 1716 Can you answer these queries III(GSS3 线段树)

转载请注明出处,谢谢http://blog.youkuaiyun.com/acm_cxlove/article/details/7854526       by---cxlove 题目:求出最大子段和,有更新操作,将某个数修改 http://www.spoj.pl/problems/GSS3/  和GSS1类似http://blog.youkuaiyun.com/acm_cxlove/article/det

窝不是爱酱,喵~~~~ 2114

【挖坑】【GSS】GSS7:树链剖分中的最大子段和

Can you answer these queries? GSS系列是spoj出品的一套数据结构好毒瘤题,主要以线段树、平衡树和树链剖分为背景,进行了一些操作的魔改,使得难度远超模板题,但对于思维有极大的提升。 所以我会选择一些在我能力范围内的题挖坑选讲,构成一个GSS系列。至于剩下那些,等我成为巨佬弄懂了再说吧。 GSS7:树链剖分中的最大子段和 原题传送门(洛谷) 本题前置芝士: GS...

Fighter的博客 774

Can you answer these queries II 【SPOJ - GSS2】【去重最大子段和】

SPOJ-GSS2 题目链接 这道题的思维有点像多个dp同时进行的样子,我们去判断一个子段和是否是最大的,是不是要和之前的做比较如果大于之前的最大子段和就可以去更新掉,这个思维先存在这,后边会用到的。 然后,再讲一下题意,这道题的题意是真的有毒啊……我WA了接近24个小时,20发了,还在猜…… 最后想通了,这道题的题意是这样的: N个a[ i ],我们要去取这样的一个区间,例如“...

既然弱小,就只顾变强就是了 354

Spoj GSS3 Can you answer these queries III 线段树求区间最大子段和

题意: 给你 n 个数,有两种操作:1,将某一点的值修改;2,给你一段区间,求出区间内最大连续子段和 思路: 线段树,将每个区间的左端点最大和(lmax)、右端点最大和(rmax)、此区间最大和(dat)、此区间和(sum)保存在结构体中,每次修改时更新即可 某一部分的的最大和有三种可能 完全是右儿子的最大子段和 完全是左儿子的最大子段和 既有一部分在左儿子中,又有一部分在右儿...

没有梦想何以远行 264

SPOJ GSS1 && GSS3 (无更新/更新单点,并询问区间最大连续和)

http://www.spoj.com/problems/GSS1/ 题意:无更新询问区间最大连续和。 做法:线段树每个节点维护sum[rt],maxsum[rt],lsum[rt],rsum[rt],分别区间和、区间最大和、区间左端最大和和区间右端最大和。   查询时按从左到右扫,维护ans为最大连续和,rans为到该段的右端最大连续和,扫到每一段时有:   ans = max...

diaoqisi8354的博客 210

SPOJ 2916 Can you answer these queries V(GSS5 线段树)

转载请注明出处,谢谢http://blog.youkuaiyun.com/acm_cxlove/article/details/7854526       by---cxlove 题目:和GSS3类似,只不过查询麻烦一点,要注意细节。区间的起点和终点都在指定区间内。 http://www.spoj.pl/problems/GSS5/  更新部分类似,查询部分也一样。 主要是把每一种查询分清楚。

窝不是爱酱,喵~~~~ 2992

SPOJ GSS 1-8的解析——一些跟最大子段和有关的数据结构问题的维护技巧

题目spoj GSS,但是太卡了,无奈之下水洛谷. T1: 给定一个序列,有MMM次操作,每次操作查询[l,r][l,r][l,r]的最大子段和,不可取空序列. 一道水题,我们可以得知,区间[l,r][l,r][l,r]的最大子段和只有三种可能:左半边最大子段和,右半边最大子段和,左半边一定包括最右端的最大子段和加右半边一定包括最左端的最大子段和. 于是我们线段树每个节点就维护四个信息:最大子段和...

hzk_cpp的博客 407

SPOJ 1043 Can you answer these queries I(GSS1 线段树)

转载请注明出处,谢谢http://blog.youkuaiyun.com/acm_cxlove/article/details/7854526       by---cxlove 题目:查询区间最大子段和 http://www.spoj.pl/problems/GSS1/  简单线段树,可是写了好久~~~跪 维护3个值,区间的最大子段和,左端连续的最大子段和,右端连续的最大子段和 查询有点麻烦~

窝不是爱酱,喵~~~~ 3319

[SGT] 线段树维护区间最大子段和

蓝书P208 https://vjudge.net/problem/SPOJ-GSS1 若将一区间分为两部分,则必有最大子段存在于左区间 / 右区间 / 跨越中间 因此当前节点记录该段的最大前缀和,最大后缀和,段和,区间内最大子段和 now.sum = ls.sum + rs.sum; now.lmax = max(ls.lmax, ls.sum + rs.lmax); now.r...

Zeolim的博客 462

SPOJ/GSS3:Can you answer these queries III(线段树)

http://www.spoj.pl/problems/GSS3/ 题意:给出一个数列,求某个区间内的最大子序列和,并进行对某些点的更新。GSS1是个不更新只查询的简化版题目,差别不大。 跟hdu3397有点像,统计量也很像,但是犯了经验主义的错误,左起最大字段和=左区间左起最大字段和  或   左区间和+右区间左起最大字段和(如果左区间左起最大字段和==左区间和)是错误的,例如:100 -1

新博客地址:sensirly.github.io 844
上一篇: SPOJ GSS1 (区间最大子段和)(线段树)
下一篇: SPOJ GSS4 (区间开根号 + 区间查询) (线段树)
ShadowGhostH
博客等级 码龄10年 13粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值