题目大意:维护动态带修改最大子段和。

题解:线段树额外维护合并最优解时需要的信息。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10; inline int read(){
int x=0,f=1;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
return f*x;
} int n,m,a[maxn];
struct node{
#define ls(x) t[x].lc
#define rs(x) t[x].rc
int lc,rc,sum,lmx,rmx,val;
}t[maxn<<1];
int tot,root;
inline void pushup(int o){
t[o].sum=t[ls(o)].sum+t[rs(o)].sum;
t[o].lmx=max(t[ls(o)].lmx,t[ls(o)].sum+t[rs(o)].lmx);
t[o].rmx=max(t[rs(o)].rmx,t[rs(o)].sum+t[ls(o)].rmx);
t[o].val=max(max(t[ls(o)].val,t[rs(o)].val),t[ls(o)].rmx+t[rs(o)].lmx);
}
int build(int l,int r){
int o=++tot;
if(l==r){t[o].sum=t[o].lmx=t[o].rmx=t[o].val=a[l];return o;}
int mid=l+r>>1;
ls(o)=build(l,mid),rs(o)=build(mid+1,r);
return pushup(o),o;
}
void modify(int o,int l,int r,int pos,int val){
if(l==r){t[o].sum=t[o].lmx=t[o].rmx=t[o].val=val;return;}
int mid=l+r>>1;
if(pos<=mid)modify(ls(o),l,mid,pos,val);
else modify(rs(o),mid+1,r,pos,val);
pushup(o);
}
node query(int o,int l,int r,int x,int y){
if(l==x&&r==y)return t[o];
int mid=l+r>>1;
if(y<=mid)return query(ls(o),l,mid,x,y);
else if(x>mid)return query(rs(o),mid+1,r,x,y);
else{
node ls=query(ls(o),l,mid,x,mid);
node rs=query(rs(o),mid+1,r,mid+1,y);
node res;
res.sum=ls.sum+rs.sum;
res.lmx=max(ls.lmx,ls.sum+rs.lmx);
res.rmx=max(rs.rmx,rs.sum+ls.rmx);
res.val=max(max(ls.val,rs.val),ls.rmx+rs.lmx);
return res;
}
} void solve(){
n=read(),m=read();
for(int i=1;i<=n;i++)a[i]=read();
root=build(1,n);
while(m--){
int opt=read(),x=read(),y=read();
if(opt==1){
if(x>y)swap(x,y);
printf("%d\n",query(root,1,n,x,y).val);
}else{
modify(root,1,n,x,y);
}
}
} int main(){
solve();
return 0;
}

update at 2019.3.17

【洛谷P4513】小白逛公园的更多相关文章

  1. 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间合并(单点更新、区间查询)

    P4513 小白逛公园 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩 ...

  2. 洛谷P4513 小白逛公园

    区间最大子段和模板题.. 维护四个数组:prefix, suffix, sum, tree 假设当前访问节点为cur prefix[cur]=max(prefix[lson],sum[lson]+pr ...

  3. 2018.07.23 洛谷P4513 小白逛公园(线段树)

    传送门 线段树常规操作了解一下. 单点修改维护区间最大连续和. 对于一个区间,维护区间从左端点开始的连续最大和,从右端点开始的连续最大和,整个区间最大和,区间和. 代码如下: #include< ...

  4. 洛谷P4513 小白逛公园 (线段树)

    这道题看起来像是线段树和最大子段和的结合,但这里求最大子段和不用dp,充分利用线段树递归的优势来处理.个人理解:线段树相当于把求整个区间的最大子段和的问题不断划分为很多个小问题,容易解决小问题,然后递 ...

  5. 线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园

    题面:小白逛公园 题解: 对于线段树的每个节点除了普通线段树该维护的东西以外,额外维护lsum(与左端点相连的最大连续区间和).rsum(同理)和sum……就行了 代码: #include<cs ...

  6. 【题解】洛谷P3953 [NOIP2017TG] 逛公园(记忆化搜索+SPFA)

    题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA  因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 ...

  7. P4513 小白逛公园

    题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着 nnn 个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白 ...

  8. luogu P4513 小白逛公园 (区间合并)

    链接:https://www.luogu.org/problemnew/show/P4513 思路: 很基础的区间合并,开四个数组: num: 区间数字的和 lsum:从左端点起最大连续字段和 rsu ...

  9. P4513 小白逛公园 动态维护最大子段和

    题目链接:https://www.luogu.org/problem/P4513 #include<iostream> #include<cstdio> #include< ...

  10. 洛谷P3953 [NOIP2017]逛公园

    K<=50,感觉可以DP 先建反图求出从n到各个点的最短路,然后在正图上DP 设f[当前点][比最短路多走的距离]=方案数 转移显然是 $f[v][res]=\sum f[u][res+tmp] ...

随机推荐

  1. 一个很好用的在线编辑、展示、分享、交流JavaScript 代码的平台

    在发表博客时,有一些代码只能粘贴进去,而不能看到代码运行的效果,需要读者把代码粘贴进自己的编辑器,然后再运行看效果,这是一件很耗时的事情 在平时百度的时候,我发现一些网站可以在线预览功能,而且可以在线 ...

  2. Python3出现"No module named 'MySQLdb'"问题-以及使用PyMySQL连接数据库

    Python3 与 Django 连接数据库,出现了报错:Error loading MySQLdb module: No module named 'MySQLdb'.原因如下:在 python2 ...

  3. M2项目测试

    更为详细的测试报告,我们会在后续整理出来. 在M1的基础上,我们新增加了两个个数据表来存放问答对以及标签信息的表:C705question表 与 tag表 第二次迭代中,我们积极地同第三组沟通,了解到 ...

  4. BugPhobia开发篇章:Beta阶段第IX次Scrum Meeting

    0x01 :Scrum Meeting基本摘要 Beta阶段第九次Scrum Meeting 敏捷开发起始时间 2015/12/25 00:00 A.M. 敏捷开发终止时间 2015/12/28 23 ...

  5. sql 语句的先后执行顺序

    例:查询语句中select from where group by having order by的执行顺序 一般以为会按照逻辑思维执行,为: 查询中用到的关键词主要包含六个,并且他们的顺序依次为  ...

  6. Ajax写成绩批量录入

    1.jsp,ajax的循环调用,必须要递归,否则会出错. <%@ page language="java" import="java.util.*" pa ...

  7. Hibernate_HQL

    public class According_condition { public static void main(String[]args){ Session session=HibernateU ...

  8. Undertow的InMemorySessionManager

    https://github.com/undertow-io/undertow/blob/master/core/src/main/java/io/undertow/server/session/In ...

  9. [区块链]POW 与POS

    POW:全称Proof ofWork,工作证明. 这是什么意思呢?就是说,你能获得多少货币,取决于你挖矿贡献的有效工作,也就是说,你电脑性能越好,分给你的矿就会越多,这就是根据你的工作证明来执行货币的 ...

  10. [转载]Linux目录说明

    原作者博客: http://blog.51cto.com/yangrong/1288072 将文字部分转移到自己的目录下便于学习记录 感谢~ 2./目录 目录 描述 / 第一层次结构的根.整个文件系统 ...