Advertisement

线段树用于求解最大连续子段和问题

阅读量:

题目描述

复制代码
    #include <bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    const int maxn=5e5+10;
    int m,n,ans,p;
    int w[maxn];
    struct node
    {
    int l,r;
    int sum,lmax,rmax,tmax;
    
    } tr[maxn*4];
    
    //重写pushup函数
    void pushup(node &u,node &l,node &r)
    {
    u.sum=l.sum+r.sum;
    u.lmax=max(l.lmax,l.sum+r.lmax);
    u.rmax=max(r.rmax,r.sum+l.rmax);
    u.tmax=max(max(l.tmax,r.tmax),l.rmax+r.lmax);
    }
    
    void pushup(int u)
    {
    pushup(tr[u],tr[u<<1],tr[u<<1|1]);
    }
    

全部评论 (0)

还没有任何评论哟~