luoguP4513 小白逛公园
https://www.luogu.org/problemnew/show/P4513
题意是给你一个序列,计算一个区间内的最大字段和,支持单点修改
线段树维护左起最大字段和,右起最大字段和,区间和和最大字段和,查询时合并区间即可
#include <bits/stdc++.h>
#define CIOS ios::sync_with_stdio(false);
#define For(i, a, b) for(register int i = a; i <= b; i++)
#define Forr(i, a, b) for(register int i = a; i >= b; i--)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
template <typename _T>
inline void read(_T &f) {
    f = 0; _T fu = 1; char c = getchar();
    while(c < '0' || c > '9') { if(c == '-') fu = -1; c = getchar(); }
    while(c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
    f *= fu;
}
template <typename T>
void print(T x) {
    if(x < 0) putchar('-'), x = -x;
    if(x < 10) putchar(x + 48);
    else print(x / 10), putchar(x % 10 + 48);
}
template <typename T>
void print(T x, char t) {
    print(x); putchar(t);
}
const int N = 5e5 + 5;
struct ele { ele () {} int lmax, rmax, maxn, sum; };
struct Node { Node () {} int l, r; ele val; } p[N << 2];
int a[N], n, m;
ele Merge(ele a, ele b) {
    ele ans; ans.sum = a.sum + b.sum;
    ans.lmax = max(a.lmax, a.sum + max(0, b.lmax));
    ans.rmax = max(b.rmax, b.sum + max(0, a.rmax));
    ans.maxn = max(max(a.maxn, b.maxn), max(a.rmax + max(0, b.lmax), max(0, a.rmax) + b.lmax));
    return ans;
}
void build(int u, int l, int r) {
    p[u].l = l, p[u].r = r;
    if(l == r) {
        p[u].val.lmax = p[u].val.rmax = p[u].val.maxn = p[u].val.sum = a[l];
        return;
    }
    int mid = (l + r) >> 1;
    build(u << 1, l, mid); build(u << 1 | 1, mid + 1, r);
    p[u].val = Merge(p[u << 1].val, p[u << 1 | 1].val);
}
void change(int u, int x, int y) {
    if(p[u].l == p[u].r) {
        p[u].val.lmax = p[u].val.rmax = p[u].val.maxn = p[u].val.sum = y;
        return;
    }
    int mid = (p[u].l + p[u].r) >> 1;
    if(mid >= x) change(u << 1, x, y); else change(u << 1 | 1, x, y);
    p[u].val = Merge(p[u << 1].val, p[u << 1 | 1].val);
}
ele query(int u, int l, int r) {
    if(p[u].l >= l && p[u].r <= r) return p[u].val;
    int mid = (p[u].l + p[u].r) >> 1;
    if(mid >= l && mid + 1 <= r) return Merge(query(u << 1, l, r), query(u << 1 | 1, l, r));
    else if(mid >= l) return query(u << 1, l, r); else return query(u << 1 | 1, l, r);
}
int main() {
    read(n); read(m);
    for(register int i = 1; i <= n; i++) read(a[i]);
    build(1, 1, n);
    while(m--) {
        int opt, x, y;
        read(opt); read(x); read(y);
        if(opt == 1) {
            if(x > y) swap(x, y);
            print(query(1, x, y).maxn, '\n');
        } else change(1, x, y);
    }
    return 0;
}
												
											luoguP4513 小白逛公园的更多相关文章
- [vijos P1083] 小白逛公园
		
不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...
 - Bzoj 1756: Vijos1083 小白逛公园  线段树
		
1756: Vijos1083 小白逛公园 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1021 Solved: 326[Submit][Statu ...
 - BZOJ 1756: Vijos1083 小白逛公园
		
题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 856 Solved: 264[Submit][Sta ...
 - JDOJ-P1260 VIJOS-P1083 小白逛公园
		
首先,在这里给大家推荐一个网站,https://neooj.com:8082,这是我母校的网站 言归正传,题目描述 VIJOS-P1083 小白逛公园 Time Limit: 1 Sec Memor ...
 - 线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园
		
题面:小白逛公园 题解: 对于线段树的每个节点除了普通线段树该维护的东西以外,额外维护lsum(与左端点相连的最大连续区间和).rsum(同理)和sum……就行了 代码: #include<cs ...
 - 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间合并(单点更新、区间查询)
		
P4513 小白逛公园 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩 ...
 - vijos1083:小白逛公园
		
小白逛公园 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的 ...
 - 小白逛公园加强版(park)
		
小白逛公园加强版(park) 题目描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦--在小新家附近有n个公园,这些公园通过一些路径相连,并保证每两个公园之间有且仅有一条通路相连(也就是说这是一棵树), ...
 - TYVJ1427 小白逛公园
		
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个 ...
 
随机推荐
- System.Diagnostics.Conditional
			
[System.Diagnostics.Conditional] 指示编译器当特定的宏定义了时,才生成此方法的相应代码.只能应用于AttributeClass.Method. 参考:http://ms ...
 - labelimg
			
------------------------labelimg------------------------- cd /home/luo/TensorflowProject/labelImg py ...
 - [C++] const inside class VS const outside class
			
const inside class VS const outside class 类内:类内的const和c语言一样,可以通过指针间接修改const变量的值,读内存,一开始必须初始化 类外:虽然可以 ...
 - c# dynamic的属性是个变量
			
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
 - 一个新手后端需要了解的前端核心知识点之position(一)
			
以下内容是基于观看慕课网视频教程总结的知识点,边打代码边总结,符合自己的思维习惯.不是针对新手入门 我做程序的初衷是想做一个网站出来.HTML语言当然重要啊,缺什么就百度什么,很浪费时间,还是好好的打 ...
 - Microsoft(C)注册服务器(32位)CPU占用高
			
Microsoft(C)注册服务器(32位)CPU占用高 摘自:https://blog.csdn.net/jtsqrj/article/details/83034252 2018年10月12日 23 ...
 - maven环境快速搭建(转)
			
出处:http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html 最近,开发中要用到maven,所以对maven进行了简单的学习.因为有个m ...
 - eclipse 按装lombok与注解说明
			
原文:http://www.cnblogs.com/ywqbj/p/5711691.html 一.安装lombok 1.下载 lombok-1.16.16.jar 包 我的下载完后放到:/root ...
 - Call to undefined function Think\C()
			
Fatal error: Call to undefined function Think\C() in /alidata/www/default/2017/newyear/simplewind/Co ...
 - How attach Java source(为eclipseIDE附加资源)
			
In Eclipse, when you press Ctrl button and click on any Class names, the IDE will take you to the s ...