传送门

线段树常规操作了解一下。

单点修改维护区间最大连续和。

对于一个区间,维护区间从左端点开始的连续最大和,从右端点开始的连续最大和,整个区间最大和,区间和。

代码如下:

#include<bits/stdc++.h>
#define N 500005
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
using namespace std;
struct Node{int l,r,ls,rs,ms,sum;}T[N<<2];
int n,m,a[N];
inline int max(int a,int b){return a>b?a:b;}
inline void pushup(int p){
    T[p].sum=T[lc].sum+T[rc].sum;
    T[p].ls=max(T[lc].ls,T[lc].sum+T[rc].ls);
    T[p].rs=max(T[rc].rs,T[rc].sum+T[lc].rs);
    T[p].ms=max(max(T[lc].ms,T[rc].ms),T[lc].rs+T[rc].ls);
}
inline void build(int p,int l,int r){
    T[p].l=l,T[p].r=r;
    if(l==r){T[p].ls=T[p].rs=T[p].ms=T[p].sum=a[l];return;}
    build(lc,l,mid);
    build(rc,mid+1,r);
    pushup(p);
}
inline void update(int p,int k,int v){
    if(T[p].l==T[p].r){
        T[p].ls=T[p].rs=T[p].ms=T[p].sum=v;
        return;
    }
    if(k<=mid)update(lc,k,v);
    else update(rc,k,v);
    pushup(p);
}
inline Node query(int p,int ql,int qr){
    if(ql<=T[p].l&&T[p].r<=qr)return T[p];
    if(qr<=mid)return query(lc,ql,qr);
    if(ql>mid)return query(rc,ql,qr);
    Node ans1=query(lc,ql,mid),ans2=query(rc,mid+1,qr),ans;
    ans.l=ans1.l,ans.r=ans2.r;
    ans.ls=max(ans1.ls,ans1.sum+ans2.ls);
    ans.rs=max(ans2.rs,ans2.sum+ans1.rs);
    ans.ms=max(max(ans1.ms,ans2.ms),ans1.rs+ans2.ls);
    ans.sum=ans1.sum+ans2.sum;
    return ans;
}
inline int read(){
    int ans=0,w=1;
    char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans*w;
}
int main(){
    n=read(),m=read();
    for(int i=1;i<=n;++i)a[i]=read();
    build(1,1,n);
    while(m--){
        int op=read(),a=read(),b=read();
        switch(op){
            case 1:{if(a>b)a^=b,b^=a,a^=b;printf("%d\n",query(1,a,b).ms);break;}
            default:{update(1,a,b);break;}
        }
    }
    return 0;
}

2018.07.23 洛谷P4513 小白逛公园(线段树)的更多相关文章

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

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

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

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

  3. 洛谷P4513 小白逛公园

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

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

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

  5. Bzoj 1756: Vijos1083 小白逛公园 线段树

    1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1021  Solved: 326[Submit][Statu ...

  6. Vijos 1083 小白逛公园(线段树)

    线段树,每个结点维护区间内的最大值M,和sum,最大前缀和lm,最大后缀和rm. 若要求区间为[a,b],则答案max(此区间M,左儿子M,右儿子M,左儿子rm+右儿子lm). ----------- ...

  7. [vijos]1083小白逛公园<线段树>

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

  8. 2018.07.23 洛谷P4097 [HEOI2013]Segment(李超线段树)

    传送门 给出一个二维平面,给出若干根线段,求出x" role="presentation" style="position: relative;"&g ...

  9. [日常摸鱼]Vijos1083小白逛公园-线段树

    题意:单点修改,询问区间最大子段和,$n\leq 5e5$ 考虑分治的方法$O(nlogn)$求一次最大子段和的做法,我们是根据中点分成左右两个区间,那么整个区间的答案要么是左边答案,要么是右边答案, ...

随机推荐

  1. jsfl 第一天

    ctrl+f10,打开操作记录 通过打开到目标fla的舞台,然后运行写好的jsfl,默认就以目标fla为调试对象. 通过name可以获取层名字,帧标签,元件实例名等,name属性要根据对象的应用而产生 ...

  2. iOS Hardware Guide

    来自U3D文档 Hardware models The following list summarizes iOS hardware available in devices of various g ...

  3. Apache相关安全设置

    刚刚安装完Apache2.2和php 5.2.14后,配置完成首次用httpd启动时出现Apache 2 Test Page,并有如下提示:     此问题的解决办法是: 1. 找到一个叫做welco ...

  4. Servlet Response 重定向

    重定向 response.sendRedirect("index.jsp");       //登录用户名不存在,重定向到index.jsp 1重定向在客户端发挥作用,通过浏览器重 ...

  5. 吴裕雄 数据挖掘与分析案例实战(5)——python数据可视化

    # 饼图的绘制# 导入第三方模块import matplotlibimport matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['S ...

  6. lrzsz的安装与配置

    1)下载http://freshmeat.sourceforge.net/projects/lrzsz/ 2)tar zxvf lrzsz-0.12.20.tar.gz 3)mv lrzsz-0.12 ...

  7. hdoj2859(矩阵DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 思路: 第一次碰到这种矩阵上的DP题,想了半天也没想明白.本来想用子矩阵的左上角坐标和右下角坐标 ...

  8. Python bool() 函数

    Python bool() 函数  Python 内置函数 描述 bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False. bool 是 int 的子类. 语法 以下是 boo ...

  9. 硬盘的 read0 read 1

    Read 0:组建的时候必须2块容量相同的硬盘,每个程序的数据以一定的大小分别写在两个硬盘里,读的时候从两个硬盘里一起读,这种阵列方式理论上硬盘的读写速度是一块硬盘的2倍,实际应用中大约速度比一块硬盘 ...

  10. URL传入带有%的参数的解决方法

    在参数中含有%时,需要将其转义为它的编码格式%25 ,后面跟对应字符的ASCII(16进制)码值 如我想要传入参数mm=75%到后台,就需要对%进行编码为%25,所以实际输入的参数是mm=75%25 ...