SP1716 GSS3 - Can you answer these queries III (线段树)_diqiao4431的博客-程序员宅基地

题意:给定n个数a[1]~a[n],有q次操作。

           操作 0 x y:把第a[x]修改为y;

           操作 1 x y:询问x到y的的最大子段和。

 

输入:第一行:一个正整数n,表示有n个整数;

           第二行:n个整数,表示数列;

           第三行:一个正整数q,表示有q个询问;

           第4~q+3行:每行三个数p,x,y,表示三种操作。

 

输出:对于每一个种类为1的询问,输出最大子段和。

 

输入样例:

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

输出样例:

6
4
-3

 

解析:用线段树进行维护,记录下每一段的和(sum),最大子段和(maxv),最大前缀(prefix),最大后缀(suffix)。则

          sum[o] = sum[o<<1] + sum[o<<1|1] ;

          maxv[o] = max( max( maxv[o<<1] , maxv[o<<1|1] ) , suffix[o<<1] + prefix[o<<1|1] ) ;

          prefix[o] = max( prefix[o<<1] , sum[o<<1] + prefix[o<<1|1] ) ;

          suffix[o] = max( suffix[o<<1|1] , suffix[o<<1] + sum[o<<1|1] ) 。最好统计答案即可。

代码如下:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define lc o<<1
 4 #define rc o<<1|1
 5 using namespace std;
 6 
 7 const int MAXN=50010;
 8 int n,a[MAXN],q,prefix[MAXN*4],suffix[MAXN*4],maxv[MAXN*4],sum[MAXN*4],ans,pre;
 9 
10 int read(void) {
11     char c; while (c=getchar(),(c<'0' || c>'9') && c!='-'); int x=0,y=1;
12     if (c=='-') y=-1; else x=c-'0';
13     while (c=getchar(),c>='0' && c<='9') x=x*10+c-'0'; return x*y; 
14 }
15 
16 void maintain(int o,int l,int r) { //维护 
17     prefix[o]=max(prefix[lc],sum[lc]+prefix[rc]);
18     suffix[o]=max(suffix[rc],sum[rc]+suffix[lc]);
19     maxv[o]=max(maxv[lc],max(maxv[rc],suffix[lc]+prefix[rc]));
20     sum[o]=sum[lc]+sum[rc];
21 }
22 
23 void build(int o,int l,int r) { //建树 
24     if (l==r) {
25       prefix[o]=a[l];
26       suffix[o]=a[l];
27       maxv[o]=a[l];
28       sum[o]=a[l];
29       return;
30     }
31     int mid=l+r>>1;
32       build(lc,l,mid); build(rc,mid+1,r);
33     maintain(o,l,r);
34 }
35 
36 void modify(int o,int l,int r,int p,int x) { //单点修改 
37     if (l==r) {
38       prefix[o]=x;
39       suffix[o]=x;
40       maxv[o]=x;
41       sum[o]=x;
42       return;
43     }
44     int mid=l+r>>1;
45       if (p<=mid) modify(lc,l,mid,p,x); else modify(rc,mid+1,r,p,x);
46     maintain(o,l,r);
47 }
48 
49 void query(int o,int l,int r,int ql,int qr) { //区间查询 
50     if (ql<=l && qr>=r) { //分三种情况考虑,统计答案 
51       ans=max(ans,maxv[o]);
52       ans=max(ans,pre+prefix[o]);
53       pre=max(pre+sum[o],suffix[o]);
54       return;
55     }
56     int mid=l+r>>1;
57     if (ql<=mid) query(lc,l,mid,ql,qr);
58     if (qr>mid) query(rc,mid+1,r,ql,qr);
59 }
60 
61 int main() {
62     n=read();
63       for (int i=1;i<=n;++i) a[i]=read();
64     build(1,1,n);
65     q=read();
66       while (q--) {
67           int p=read(),x=read(),y=read();
68             if (p) {
69                   ans=pre=-2e9;
70                   query(1,1,n,x,y);
71                   printf("%d\n",ans);
72             }
73           else {
74               modify(1,1,n,x,y);
75           }
76       }
77     return 0;
78 }

 

转载于:https://www.cnblogs.com/Gaxc/p/9737816.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/diqiao4431/article/details/101867811

智能推荐

1.6.4- 四大名著案例_dengshenjue2256的博客-程序员宅基地

代码如下:&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;四大名著&lt;/title&gt;&lt;/head&gt;&lt;body&gt; &lt;h1&gt;四大名著&lt;/h1&gt...

AssetBundle学习之路(四) ------ asset bundle加载及获取里面的资源_cannot load asset bundle file using loadrawfileasy_千喜的博客-程序员宅基地

 siki学院学习链接:http://www.sikiedu.com/my/course/741.总体加载流程       1.2两步是文章所提到过的步骤:AssetBundle学习之路(一) ------ 定义/作用/打包流程            打包之后的asset bundle包一般都是放在服务器端,放在APK中会有两个问题:       增加APK包的大小,影响用...

splunk配置转发和接收_splunkforwarder_Jepson2017的博客-程序员宅基地

项目需求:将服务器A:192.168.149.200中的某路径下的文件转发到服务器B:192.168.149.100中实现方法:在服务器A上安装一套splunk Enterprise(splunk自带的重型转发器功能)或者是splunk 通用转发器(splunkforwarder),在服务器B上安装一套splunk Enterprise,用于接收来自A转发的文件数据,并进行索引。转发器的配置大致...

基于JavaEE的汉服购物商城 项目(可毕设)_King丶段的博客-程序员宅基地

项目下载: 基于JavaEE的汉服购物商城 (可用毕设)本项目于2020年10月构想编写项目前端原型是从网上找的一个u袋网的购物商城界面。本项目使用的是jsp、servlet、javascript、ajax、jquery、tomcat、redis、MySQL。除项目本身,还有前端的项目原型,有写好的数据字典、SQL文件、流程图、功能图等。!项目下载: 基于JavaEE的汉服购物商城 (可用毕设)...

人脸抓拍_人脸抓拍算法_datamining2005的博客-程序员宅基地

本文链接:https://blog.csdn.net/yimin_tank/article/details/83538667人脸抓拍系统基本框架对于普通相机接入方式要么是RTSP方式,要么是直接调用相机厂家SDK。目前大多数相机厂家SDK都能够取流并解析出帧数据。获取到帧数据后就需要进行人脸检测、跟踪。人脸检测、跟踪后获取最佳人脸,将最佳人脸进行人脸属性及质量分析,得到结构化数据。...

ubuntu权限不够(进入后身份并不是root而是自己的默认登录名的情况)_ubuntu 为什么我不是root_阳小良的博客-程序员宅基地

ubuntu权限不够(进入后身份并不是root而是自己的默认登录名的情况)是自己的默认登录名的情况下创建文件夹说权限不够。这是需要sudo到root用户下。sudo -i然后输入用户的密码,就可以进行想做的操作了sudo -i是Linux终端命令下改变用户对命令使用权限的命令,例如,在Linux命令终端中,开始为“[email protected]:~$”,当使用该命令后,会出

随便推点

wps拼写检查词典下载_如何将拼写检查仅限于Word中的主词典_culintai3473的博客-程序员宅基地

wps拼写检查词典下载Word allows you to add custom dictionaries to use when checking spelling. When you run the spell checker or when Word automatically checks spelling as you type, the words in your document a...

grails json_掌握Grails,JSON和Ajax异步Grails_cusi77914的博客-程序员宅基地

存档日期:2019年5月13日 | 首次发布:2008年11月18日 JavaScript对象表示法(JSON)和异步JavaScript + XML(Ajax)是Web 2.0开发的基础。 在Mastering Grails系列的这一期中,作者Scott Davis演示了Web框架中固有的JSON和Ajax功能。 此内容不再被更新或维护。 全文以PDF格式“按原样”提供。 随着技术的...

UnknownError: session deleted because of page crash from tab crashed_dghh81279的博客-程序员宅基地

一、问题在docker上跑Selenium+ChromeDriver+Chrome无头模式报错:UnknownError: unknown error: session deleted because of page crashfrom tab crashed(Session info: chrome=43.0.2357.81)(Driver info: chromedrive...

C#中读写INI文件_dengdang6324的博客-程序员宅基地

在网上找了关于ini文件读写方法,还是没有找到ini文件中有一个Section多个Key的读写情况,在一篇C++文章中得到点提示操作如下:1.创建ini文件读写类:usingSystem.Runtime.InteropServices;usingSystem.Text;namespaceINIDemo{/**////&lt;summary&g...

java的受检异常(checked exception)和非受检异常(unchecked exception)_每天晒白牙的博客-程序员宅基地

首先看一下java异常的层次图从图中我们可以看出,Error和Exception都是Throwable的子类Error一般指在java虚拟机中发生的,不需要程序猿try-catch或者抛出受检异常(checked exception):在编译时需要检查的异常,需要用try-catch或throws处理。在java中主要指除了Error和RuntimeException之外的异常非受检异常(unch...

商务英语口语 笔记_高新普惠_搬砖手的博客-程序员宅基地

第一课.  Self-Introduction基本知识欢迎:    Thank you forcoming all this way , 【称呼】。 Onbehalf of [单位,city of beijin ],  I am very glad towelcome you (正式的,very glad 要有感情)    Welcome to  [单位] ( 更随意的) 自我

推荐文章

热门文章

相关标签