GSS3 - Can you answer these queries III

GSS3 - Can you answer these queries III

题面翻译

n n n 个数, q q q 次操作

操作0 x y A x A_x Ax 修改为 y y y

操作1 l r询问区间 [ l , r ] [l, r] [l,r] 的最大子段和

感谢 @Edgration 提供的翻译

题目描述

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 }.

输入格式

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 }.

输出格式

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

样例 #1

样例输入 #1

4
1 2 3 4
4
1 1 3
0 3 -3
1 2 4
1 3 3

样例输出 #1

6
4
-3

分析

线段树,但维护什么呢?可以维护一个最大子段和,那么见下图:
图图
线段树把区间分成两段,这里叫L,R吧,可以得出最大子段和: m a x n = max ⁡ L m a x n , R m a x n maxn=\max{L_{maxn}},{R_{maxn}} maxn=maxLmaxn,Rmaxn
但这两种情况仍不足,可能最大子段和来自L和R,如图
在这里插入图片描述

故应维护最大前缀和pre,与最大后缀和suf,得出公式 m a x n = max ⁡ { L m a x n , R m a x n , L s u f + R p r e } maxn=\max\{{L_{maxn}},{R_{maxn}},L_{suf}+R_{pre}\} maxn=max{Lmaxn,Rmaxn,Lsuf+Rpre}
那么怎么维护pre与suf呢,不难想到:
p r e = max ⁡ L p r e , L s u m + R p r e pre=\max L_{pre},L_{sum}+R_{pre} pre=maxLpre,Lsum+Rpre
s u f = max ⁡ R s u f , L s u f + R s u m suf=\max R_{suf},L_{suf}+R_{sum} suf=maxRsuf,Lsuf+Rsum
需要维护区间和sum

代码

#include <bits/stdc++.h>
using namespace std;
const int M = 1e5+10;
int a[M],n,m;
void read(){cin>>n;for (int i=1;i<=n;i++) cin>>a[i];	cin>>m;
}
struct node{int maxn,pre,suf,sum;
};
struct segment{#define rc(x) ((x<<1)|1)#define lc(x) (x<<1)node seg[M<<2];void push_up(int x){int l=lc(x),r=rc(x);seg[x].sum=seg[l].sum+seg[r].sum;seg[x].pre=max(seg[l].pre,seg[l].sum+seg[r].pre);seg[x].suf=max(seg[r].suf,seg[r].sum+seg[l].suf);seg[x].maxn=max(max(seg[l].maxn,seg[r].maxn),seg[l].suf+seg[r].pre);}void build(int o,int l,int r){if (l==r) {seg[o].maxn=seg[o].pre=seg[o].suf=seg[o].sum=a[l];return;}int mid=l+r>>1;build(lc(o),l,mid);build(rc(o),mid+1,r);push_up(o);}void update(int x,int y,int o=1,int l=1,int r=n){if (l==r and l==x) {seg[o].maxn=seg[o].pre=seg[o].suf=seg[o].sum=y;return;}if (x<l or r<x) return;int mid=l+r>>1;update(x,y,lc(o),l,mid);update(x,y,rc(o),mid+1,r);push_up(o);}node query(int ql,int qr,int o=1,int l=1,int r=n){if (ql<=l and r<=qr) return seg[o];int mid=l+r>>1;bool f1=0,f2=0;node left,right;if (ql<=mid) left=query(ql,qr,lc(o),l,mid),f1=1;if (mid+1<=qr) right=query(ql,qr,rc(o),mid+1,r),f2=1;node ans;if (f1 and f2){ans.sum=left.sum+right.sum;ans.pre=max(left.pre,left.sum+right.pre);ans.suf=max(right.suf,right.sum+left.suf);ans.maxn=max(max(left.maxn,right.maxn),left.suf+right.pre);}else if(f1) ans=left;else ans=right;return ans;}
}T1;
void solve(){int x,y,z;cin>>z>>x>>y;if(z) cout<<T1.query(x,y).maxn<<endl;else T1.update(x,y);
}
int main(){read();T1.build(1,1,n);while(m--) solve();return 0;
}

分析

	node query(int ql,int qr,int o=1,int l=1,int r=n){if (ql<=l and r<=qr) return seg[o];int mid=l+r>>1;bool f1=0,f2=0;node left,right;if (ql<=mid) left=query(ql,qr,lc(o),l,mid),f1=1;if (mid+1<=qr) right=query(ql,qr,rc(o),mid+1,r),f2=1;node ans;if (f1 and f2){ans.sum=left.sum+right.sum;ans.pre=max(left.pre,left.sum+right.pre);ans.suf=max(right.suf,right.sum+left.suf);ans.maxn=max(max(left.maxn,right.maxn),left.suf+right.pre);}else if(f1) ans=left;else ans=right;return ans;}

这段不好理解故分了3部分

  1. 查询区间来自两部分:需合并两部分,可以看看push_up
  2. 来自左部分:返回left
  3. 来自右部分:返回right

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/79902.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

laravel语言包问题

1、更新vendor composer require "overtrue/laravel-lang:3.0" 2、修正配置文件 config/app.php 3、 php artisan config:clear 更新缓存 4、设定新的语言包 在这个resources\lang目录下加即可

dubbo之基础知识

Dubbo 官网地址&#xff1a;Apache Dubbo Dubbo 是一款易用、高性能的 WEB 和 RPC 框架&#xff0c;同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践 作用 1.远程方法调用 2.容错和负载均衡 3.提供服务的自动注册与发现 为什么需要…

MyBatis 查询数据库之二(增、删、改、查操作)

目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper&#xff08;interface&#xff09;里面添加增加方法的声…

YOLOv5项目调试与实战

拥有青春的时候 你就要感受它 不要浪费你的黄金时代 把宝贵的内在生命活出来 什么都别错过 一、项目介绍与环境配置 github地址 选择5.0版本的tag&#xff0c;并下载源码 使用Pycharm打开代码 选择解释器&#xff0c;我选择的是之前conda创建的pytorch环境 安装项目所需要用到…

go-zero超强工具goctl的常用命令api,rpc,model及其构建的服务解析

goctl api 详情移步&#xff1a; go-zero的路由机制解析 基于go-zero的api服务刨析并对比与gin的区别 goctl rpc goctl支持多种rpc&#xff0c;较为流行的是google开源的grpc&#xff0c;这里主要介绍goctl rpc protoc的代码生成与使用。 protoc是grpc的命令&#xff0c;作用…

Flowise AI:用于构建LLM流的拖放UI

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是Flowise AI&#xff1f; Flowise AI是一个开源的UI可视化工具&#xff0c;用于帮助开发LangChain应用程序。在我们详细介绍 Flowise AI 之前&#xff0c;让我们快速定义 LangChain。LangChain是…

powershell几句话设置环境变量

设置环境变量比较繁琐&#xff0c;现在用这段话&#xff0c;在powershell中就可以轻松完成。 $existingPath [Environment]::GetEnvironmentVariable("Path", "Machine") $newPath "C:\Your\Path\Here"if ($existingPath -split ";"…

MySQL(1)

MySQL创建数据库和创建数据表 创建数据库 1. 连接 MySQL mysql -u root -p 2. 查看当前的数据库 show databases; 3. 创建数据库 create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码 create database 数据库名 character set utf8; 5. 查看和显示…

Doris(四)-Rollup 使用

1&#xff0c;基本语法 1.1 新增 alter table user_landing_record_newadd rollup succ_login_count_index(user_id,day_succ_login_count); 1.2删除 alter table user_landing_record_newdrop rollup succ_login_count_index; 1.3其他操作&#xff0c;参考官网 传送门 …

【新】通达OA前台反序列化漏洞分析

0x01 前言 注&#xff1a;本文仅以安全研究为目的&#xff0c;分享对该漏洞的挖掘过程&#xff0c;文中涉及的所有漏洞均已报送给国家单位&#xff0c;请勿用做非法用途。 通达OA作为历史上出现漏洞较多的OA&#xff0c;在经过多轮的迭代之后已经很少前台的RCE漏洞了。一般来说…

RabbitMQ的安装

RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本&#xff1a;otp_win64_23.2 rabbitmq-server-3.8.16 版本说明&#xff1a;https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…

探讨|使用或不使用机器学习

动动发财的小手&#xff0c;点个赞吧&#xff01; 机器学习擅长解决某些复杂问题&#xff0c;通常涉及特征和结果之间的困难关系&#xff0c;这些关系不能轻易地硬编码为启发式或 if-else 语句。然而&#xff0c;在决定 ML 是否是当前给定问题的良好解决方案时&#xff0c;有一…

按轨迹运行

文章目录 import math import timeimport numpy as np import matplotlib.pyplot as pltdef plot_arrow(x, y, yaw, length=5, width=1):dx = length * math.cos(yaw)dy = length * math.sin(yaw)plt.arrow(x, y, dx, dy, head_length=width, head_width=width)plt.plot([x, x …

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本 引言 在 Java 生态系统中&#xff0c;Spring Boot、Spring Cloud 和 Spring Alibaba 是非常流行的框架&#xff0c;它们提供了丰富的功能和优雅的解决方案。然而&#xff0c;随着不断的发展和更新&…

SSM项目-博客系统

在线体验项目&#xff1a;登陆页面 项目连接&#xff1a;huhublog_ssm: 个人博客系统 技术栈&#xff1a;SpringBoot、SpringMVC、Mybatis、Redis、JQuery、Ajax、Json (gitee.com) 1.项目技术点分析 SpringBoot、SpringWeb(SpringMVC)、MyBatis、MySQL(8.x)、Redis(存储验…

EXCEL, 用if({1,0,0} ...) 实现把给定的区域,输出为任意你想要的矩阵,数组区域!

目录 1 原材料&#xff1a;这样的一个区域 工具 if({1,0,0}) 数组公式 1.1 原始数据 1.2 原理 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.1 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.2 原理1&#xff1a; if 数组原理&#…

【无标题】云原生在工业互联网的落地及好处!

什么是工业互联网&#xff1f; 工业互联网&#xff08;Industrial Internet&#xff09;是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态&#xff0c;通过对人、机、物、系统等的全面连接&#xff0c;构建起覆盖全产业链、全价值链的全新制造和服务…

【Pycharm2022.2.1】python编辑器最新版安装教程(包含2017-2022的所有版本win/mac/linux)

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 永久安装 Pycharm&#xff08;2017-2022的win/mac/linux所有版本&#xff09;/ IntelliJ IDEA也可以, 按照本文教程所写的&#xff0c;具体步骤跟着下面的图文教程一步一步来就行&#xff0c;一分钟即可搞定&#xff0c;过…

红队钓鱼技术之LNK快捷方式

简介 lnk文件是用于指向其他文件的一种文件。这些文件通常称为快捷方式文件&#xff0c;通常它以快捷方式放在硬盘上&#xff0c;以方便使用者快速的调用。lnk钓鱼主要将图标伪装成正常图标&#xff0c;但是目标会执行shell命令 步骤 1.编写shell命令 首先新建一个文本文件t…

vuejs源码分析之全局API(vm.$off)

vue在初始化的时候会给vue对象本身挂载一些全局的api。今天我们一个一个来看这些api。 vm.$off方法 这个方法是用来移除自定义事件监听器。 他的用法 vm.$off(event, calback)第一个参数event取值可以是string字符串&#xff0c;也可以是Array<string>也就是说既可以删…