链接:https://www.luogu.org/problemnew/show/P4513

思路: 很基础的区间合并,开四个数组:

num: 区间数字的和

lsum:从左端点起最大连续字段和

rsum:从右端点起最大连续字段和

sum:区间最大连续字段和

然后按照以前合并的思路合并下就完事了。

好久没写区间合并的题。。还被卡了一阵子,属实弟弟

实现代码;

#include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define ls rt<<1
#define rs rt<<1|1
const int M = 1e6+;
struct node{
int sum,lsum,num,rsum;
}t[M<<]; void pushup(int rt){
t[rt].num = t[ls].num + t[rs].num;
t[rt].sum = max(t[ls].sum,t[rs].sum);
t[rt].lsum = max(t[ls].lsum,t[rs].lsum+t[ls].num);
t[rt].rsum = max(t[rs].rsum,t[ls].rsum+t[rs].num);
t[rt].sum = max(t[rt].sum,t[ls].rsum+t[rs].lsum);
} void update(int p,int c,int l,int r,int rt){
if(l == r){
t[rt].sum = t[rt].lsum = t[rt].rsum = t[rt].num = c;
return ;
}
int mid = (l + r) >> ;
if(p <= mid) update(p,c,lson);
else update(p,c,rson);
pushup(rt);
} node query(int L,int R,int l,int r,int rt){
if(L<=l&&R>=r){
return t[rt];
}
int mid = (l + r) >> ;
if(R <= mid) return query(L,R,lson);
else if(L > mid) return query(L,R,rson);
else{
node t1 = query(L,R,lson),t2 = query(L,R,rson),ret;
ret.lsum = max(t1.lsum,t2.lsum+t1.num);
ret.rsum = max(t2.rsum,t1.rsum+t2.num);
ret.sum = max(max(t1.sum,t2.sum),t1.rsum+t2.lsum);
return ret;
}
} int main()
{
int n,q,x,y,op;
scanf("%d%d",&n,&q);
for(int i = ;i <= n;i ++)
scanf("%d",&x),update(i,x,,n,);
while(q--){
scanf("%d%d%d",&op,&x,&y);
if(op == ){
if(y < x) swap(x,y);
printf("%d\n",query(x,y,,n,).sum);
}
else{
update(x,y,,n,);
}
}
return ;
}

luogu P4513 小白逛公园 (区间合并)的更多相关文章

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

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

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

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

  3. P4513 小白逛公园

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

  4. 洛谷P4513 小白逛公园

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

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

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

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

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

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

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

  8. P4513 小白逛公园 (线段树)

    题目链接 Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 \(4\) 个变量: \(amx\) 代表当前节点的最大值. \(lmx\) 代表当前节点以左端点为起点的区间最大值. ...

  9. BZOJ 1756: Vijos1083 小白逛公园

    题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 856  Solved: 264[Submit][Sta ...

随机推荐

  1. 国内Maven镜像仓库

    <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http:/ ...

  2. filter(expr|obj|ele|fn)筛选出与指定表达式匹配的元素集合。

    filter(expr|obj|ele|fn) 概述 筛选出与指定表达式匹配的元素集合. 这个方法用于缩小匹配的范围.用逗号分隔多个表达式 参数 exprStringV1.0 字符串值,包含供匹配当前 ...

  3. CSS 图片自适应容器

    https://www.jb51.net/css/660677.html 经常有这样一个场景,需要让图片自适应容器的大小. 1.img标签的方式 我们马上就能想到,把width.height 设置为1 ...

  4. luogu 4234 最小差值生成树 LCT

    感觉码力严重下降~ #include <bits/stdc++.h> #define N 400006 #define inf 1000000000 #define setIO(s) fr ...

  5. [Luogu] 花神游历各国

    https://www.luogu.org/problemnew/show/P4145 线段树区间求和 + 区间开根号 对1e9的数开根号下取整用不了几次就会<=1 因此暴力开根号,记录区间最大 ...

  6. Cogs 1688. [ZJOI2008]树的统计Count(树链剖分+线段树||LCT)

    [ZJOI2008]树的统计Count ★★★ 输入文件:bzoj_1036.in 输出文件:bzoj_1036.out 简单对比 时间限制:5 s 内存限制:162 MB [题目描述] 一棵树上有n ...

  7. Tomcat怎么关闭日志输出

    tomcat中禁用catalina.out的输出,又可能很大. 1.直接修改catalina.sh文件的输出语句. 在文件中找到以下内容. if [ -z "$CATALINA_OUT&qu ...

  8. C# Unicode编码解码

    public static class CommpnHelpEx { /// <summary> /// unicode编码 /// </summary> /// <pa ...

  9. 第一次使用Open Live Writer写博客

    写一下来试一试,感觉还是蛮有趣的.但是我并不知道写下来的文章是什么格式的,我刚才用VS Code打开看了一下好像都是二进制格式. 7.5正式入职,已经过去七天了.等培训结束就要去Base地了,新的生活 ...

  10. nuxt使用教程

    1 引言 Nuxt 是基于 Vue 的前端开发框架,这次我们通过 Introduction toNuxtJS 视频了解框架特色以及前端开发框架的基本要素. nuxt 与 next 结构很像,可以结合在 ...