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

在Simulink中搭建一个基于IoT设备间通信协议栈的仿真模型 物联网(IoT)设备间的通信协议栈仿真对于理解不同层级的协议如何协同工作,以及优化网络性能至关重要。通过Simulink结合MATLAB的强大功能,我们可以模拟和分析从物理层到应用层的完整通信过程。下面详细介绍如何使用Simulink进行IoT设备间通信协议栈的仿真。 阅读详情

Can you answer these queries III

Description

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: 
modify the i-th element in the sequence or for given x y print max{Ai + Ai+1 + .. + Aj | x<=i<=j<=y }.

Input

The first line of input contains an integer N. The following line contains N integers, representing the sequence A1..AN. 
The third line contains an integer M. The next M lines contain the operations in following form:
0 x y: modify Ax into y (|y|<=10000).
1 x y: print max{Ai + Ai+1 + .. + Aj | x<=i<=j<=y }.

Output

For each query, print an integer as the problem required.

Example

Input:
4
1 2 3 4
4
1 1 3
0 3 -3
1 2 4
1 3 3

Output:
6
4
-3

解题思路:

在询问一段数列的连续最大自序列和的基础上,增加了单点修改。

AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 50005;
int a[N];
struct node{
    int l,r,lx,rx,mx,sum;
}tree[N<<2];

void pushUp(int id){
    tree[id].lx = max(tree[id<<1].lx,tree[id<<1|1].lx+tree[id<<1].sum);
    tree[id].rx = max(tree[id<<1|1].rx,tree[id<<1].rx+tree[id<<1|1].sum);
    tree[id].mx = max(max(tree[id<<1].mx,tree[id<<1|1].mx),tree[id<<1].rx+tree[id<<1|1].lx);
    tree[id].sum = tree[id<<1].sum+tree[id<<1|1].sum;
}

void build(int id,int l,int r){
    tree[id].l = l;
    tree[id].r = r;
    if(l == r){
        tree[id].lx = tree[id].rx = tree[id].mx = tree[id].sum = a[l];
        return ;
    }
    int mid = (l+r)/2;
    build(id<<1,l,mid);
    build(id<<1|1,mid+1,r);
    pushUp(id);
}
int Q_L(int id,int l,int r){
    if(tree[id].l == l && tree[id].r == r)
        return tree[id].lx;
    int mid = (tree[id].l+tree[id].r)/2;
    if(r <= mid)
        return Q_L(id<<1,l,r);
    else if(l > mid)
        return Q_L(id<<1|1,l,r);
    else return max(Q_L(id<<1,l,mid),max(tree[id<<1].sum,tree[id<<1].sum+Q_L(id<<1|1,mid+1,r)));
}
int Q_R(int id,int l,int r){
    if(tree[id].l == l && tree[id].r == r)
        return tree[id].rx;
    int mid = (tree[id].l+tree[id].r)/2;
    if(r <= mid)
        return Q_R(id<<1,l,r);
    else if(l > mid)
        return Q_R(id<<1|1,l,r);
    else return max(Q_R(id<<1|1,mid+1,r),max(tree[id<<1|1].sum,tree[id<<1|1].sum+Q_R(id<<1,l,mid)));
}

void update(int id,int x,int val){
    if(tree[id].l == tree[id].r){
        tree[id].mx += val;
        tree[id].rx += val;
        tree[id].lx += val;
        tree[id].sum += val;
        return ;
    }
    int mid = (tree[id].l+tree[id].r)/2;
    if(x <= mid)
        update(id<<1,x,val);
    else
        update(id<<1|1,x,val);
    pushUp(id);
}

int query(int id,int l,int r){
    if(tree[id].l == l && tree[id].r == r)
        return tree[id].mx;
    int mid = (tree[id].l+tree[id].r)/2;
    if(r <= mid)
        return query(id<<1,l,r);
    else if(l > mid)
        return query(id<<1|1,l,r);
    else return max(max(query(id<<1,l,mid),query(id<<1|1,mid+1,r)),Q_R(id<<1,l,mid)+Q_L(id<<1|1,mid+1,r));
}

int main(){
    int n,m;
    while(~scanf("%d",&n)){
        for(int i = 1; i <= n; i++)
            scanf("%d",&a[i]);
        build(1,1,n);
        int op,x,y;
        scanf("%d",&m);
        while(m--){
            scanf("%d%d%d",&op,&x,&y);
            if(op == 0){
                update(1,x,y-a[x]);
                a[x] = y;
            }
            else
                printf("%d\n",query(1,x,y));
        }
    }
    return 0;
}


同步调相机启动与并网控制技术方案 同步调相机起动与并网控制技术方案采用背靠背变流器系统,通过静止变频器(SFC)策略实现无原动机驱动的同步电机从静止到同步转速的平稳起动。方案详细阐述了硬件自检、模块初始化、转子位置检测等关键环节,重点解决启动转矩为零、冲击电流大等挑战。系统基于STM32或C2000系列控制器,包含网侧/机侧变流器、检测保护单元及通信接口,通过励磁脉冲和电压响应分析实现高精度转子初始定位,为后续并网提供必要条件。代码级实现涵盖了ADC自检、数字IO验证及通信端口测试等核心功能。 阅读详情

相关推荐

瑞芯微rv1126 rtsp+mpp+rga取流

瑞芯微rv1109 rtsp+mpp+rga取流

ZuoSeDiao的博客 6338

题解 SP1716 【GSS3 - Can you answer these queries III】

前言 首先说一下题意。就是每次给出 \(x\) 和 \(y\) 两个数,求 \(x\) 到 \(y\) 这个区间的最大子段和 正文 分析 首先我们看这个数据范围,我们显然是要用线段树来做这道题。 我们考虑如何pushup。 pushup的操作 区间最大字段和 我们考虑一个区间的最大子段 我们分 \(3\) 种情况讨论 1. 有可能是左边部分的最大子段和 答案就是左边部分的最大子段和 ...

ZHK's blog 451

数据中心光模块升级实录:从200G QSFP56到400G QSFP-DD的踩坑指南

本文记录了数据中心从200G QSFP56升级至400G QSFP-DD光模块的完整实战经验。文章深入剖析了升级过程中面临的兼容性、链路预算、布线、散热与功耗管理等核心挑战,并提供了具体的解决方案与排坑指南,为高速网络升级提供了宝贵的实践参考。

butter的博客 478

【洛谷】SP1716

数据结构 #线段树。

Antonio915的博客 902

iperf3网络性能测试全攻略:从带宽到丢包率的实战技巧

本文提供了iperf3网络性能测试的完整实战指南,涵盖从基础部署到高级诊断的全流程。详细解析了TCP带宽测试的进阶技巧与UDP丢包率分析的深度方法,帮助网络工程师精准量化带宽、丢包率等关键指标,有效定位网络瓶颈并优化性能。

efc123456的博客 1018

【2023】Java利用modbus4j实现工业设备Modbus TCP数据采集与解析

本文详细介绍了在2023年使用Java和modbus4j库实现工业设备Modbus TCP数据采集与解析的完整实践。内容涵盖开发环境搭建、TCP连接建立、开关量与模拟量数据的读取与解析、批量读取性能优化、控制指令写入以及常见错误排查指南,为开发者构建稳定高效的工业物联网数据采集系统提供全面指导。

rose2的博客 722

SP1716 GSS3 - Can you answer these queries III(线段树)

题目链接:点击这里 题目大意: 给定一个长度为 nnn 的序列,进行 mmm 个操作,操作有两种: 单点修改 求 [l,r][l,r][l,r] 的最大子段和 题目分析: 考虑如何合并 [l,mid].[mid+1,r][l,mid].[mid+1,r][l,mid].[mid+1,r] 这两个区间的最大子段和: 如果最大子段和不经过区间中点那么直接返回两个子区间的最大子段和的最大值即可 如果经过中点,我们需要同时维护包含左右端点的最大子段和 pre,sufpre,sufpre,suf ,和区间元素和

羊驼的博客 210

第42章:AI代码生成的质量标准——何时用AI、何时自己写

> - AI代码生成的质量分级标准:可用、稳定、安全、优雅 > - 一个决策矩阵:什么场景适合用AI,什么场景必须人工编写 > - 如何评估AI生成的代码质量(复杂度、可读性、安全性) > - 实战对比:同一需求下AI生成代码 vs 人工编写代码 > - 团队落地:将质量标准集成到Code Review和CI流程 > - 我如何将团队AI代码接受率从70%提升到90%

sfishfly的博客 161

SP1716 GSS3 - Can you answer these queries III

这是一个线段树单点修改,区间查询的一个题目,算是线段树最基本的操作,但是考察了分治思想,所以这个题还是有一点难度,不是在于线段树的操作,而是如果想不到最大连续子列和的分治算法,那么可能无从下手。知识点:线段树,分治。

m0_73035684的博客 168

11-16 Fluent结果查看及后处理功能(做动画、监控点)

监控点、面及动画操作

zheaa的博客 1万+

Open3D 体素下采样【2026最新版】

体素滤波,博客长期更新,本文最近更新时间为:2026年4月11日。

点云侠的博客 37万+

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

MCAL中Dsadc的配置

DSADC模块作为一个专用的模块,主要应用在编码器软解码,功能强大而复杂,这里介绍了Dsadc的mcal配置和详细描述,让你全面学习和理解这个模块功能和应用。

dhyw12399999的博客 786

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

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

新博客地址:sensirly.github.io 844

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[SPOJ GSS3] Can you answer these queries III [线段树]

与GSS1一样,额外添加了单点修改成某值的操作 给定一个序列,查询区间子段和的最大值。即给x,y,求sum=a[i]+a[i+1]+...+a[j],x 线段树,每个节点保存从左开始的最大值,从右开始的最大值,中间的最大值,区间和。

jinzhao1994的专栏 595

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

原题链接: SPOJ 题意简述 支持两种操作: 单点修改 求区间最大子段和 长度5e45e45e4,询问5e45e45e4,每个数绝对值1e41e41e4。 数据 输入 n a1 a2 ... an//长度,数列 q//询问个数 operation//一个询问, //0 x y 单点修改:位置x变成y //1 x y 区间[x,y]求最大子段和 输出 对每个1类型的询问,输出答案 样例 输入...

LightningUZ的博客 272

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

题意:带修 求区间最大连续子段和 题解:我们需要维护的信息有 区间和 区间最大子段和 区间左连续最大子段和 区间右连续最大子段和    然后模拟即可 #include <bits/stdc++.h> using namespace std; const int MAXN = 5e4 + 5; int n, m; int a[MAXN]; st...

weixin_30765505的博客 161

线段树 - Can you answer these queries III - SPOJ - GSS3

线段树 - Can you answer these queries III - SPOJ - GSS3 给定长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1、“1 x y”,查询区间 [x,y] 中的最大连续子段和,即 maxx≤l≤r≤y∑i=lrA[i]max_{x≤l≤r≤y}{∑^r_{i=l}A[i]}maxx≤l≤r≤y​∑i=lr​A[i]。 2、“0 x y”,把 A[x] 改成 y。 对于每个查询指令,输出一个整数表示答案。 输入格式 第一行两个整数N,M。 第二行N个整

njuptACMcxk的博客 230

SPOJ - GSS3 Can you answer these queries III(线段树+区间合并)

题目链接:点击查看 题目大意:给出一个长度为n的序列,进行m次操作: 1 x y 查询区间[l,r]中的最大连续子段和 0 x y将第x个数修改为y 题目分析:因为涉及到单点修改和区间查询等操作,所以可以选择线段树和树状数组,但又因为需要维护的变量比较多,所以我们选择用线段树操作方便点。因为要维护每个区间段的最大连续子段和,所以我们需要像区间合并那种题目一样,另外维护四个变量,ll,r...

Falcon的博客 434

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

Can you answer these queries III 题目链接 You are given a sequence A of NNN (N≤50000N \leq 50000N≤50000) integers between −10000-10000−10000 and 100001000010000. On this sequence you have to apply MMM (M≤50000M \leq 50000M≤50000) operations: modify the i-th el

m0_51864047的博客 122

SPOJ GSS3 Can you answer these queries III[线段树]

SPOJ - GSS3 Can you answer these queries III Description 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) ...

weixin_30892889的博客 95

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

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

没有梦想何以远行 264

2019.03.24【SPOJ-GSS3】Can you answer these queries III(线段树)

传送门 解析: 序列问题考虑线段树,考虑合并两个区间,显然新的答案是两个区间的答案和两个区间前后缀最大值拼起来的答案。 为了更新前后缀最大值需要维护一下区间和。 代码: #include<bits/stdc++.h> #define ll long long #define re register #define gc get_char #define cs const name...

zxyoi_dreamer的博客(不定期诈尸) 272

SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并

Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目。 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间合并(单点更新、区间查询) 代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 type...

weixin_30652491的博客 169

C - 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: modify the i-th element in the sequence or for given...

Ellery的book 222

SPOJ GSS3 Can you answer these queries III ——线段树

【题目分析】 GSS1的基础上增加修改操作。 同理线段树即可,多写一个函数就好了。 【代码】 #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <map> #include <s...

weixin_34417200的博客 120
上一篇: LightOj 1047 Neighbor House(基础dp)
下一篇: [Offer收割] 编程练习赛3
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值