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 小白逛公园的更多相关文章

  1. [vijos P1083] 小白逛公园

    不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...

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

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

  3. BZOJ 1756: Vijos1083 小白逛公园

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

  4. JDOJ-P1260 VIJOS-P1083 小白逛公园

    首先,在这里给大家推荐一个网站,https://neooj.com:8082,这是我母校的网站 言归正传,题目描述 VIJOS-P1083 小白逛公园 Time Limit: 1 Sec  Memor ...

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

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

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

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

  7. vijos1083:小白逛公园

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

  8. 小白逛公园加强版(park)

    小白逛公园加强版(park) 题目描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦--在小新家附近有n个公园,这些公园通过一些路径相连,并保证每两个公园之间有且仅有一条通路相连(也就是说这是一棵树), ...

  9. TYVJ1427 小白逛公园

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述     小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个 ...

随机推荐

  1. Scala基础:类和构造器

    类 package com.zy.scala.cls /** * 在 Scala 中,类并不用声明为 public 类型的. * Scala 源文件中可以包含多个类,所有这些类都具有共有可见性. */ ...

  2. VUE+WebPack游戏设计:'乘法防线'游戏设计

  3. Nginx源码完全注释(7)ngx_palloc.h/ngx_palloc.c

    ngx_palloc.h /* * NGX_MAX_ALLOC_FROM_POOL should be (ngx_pagesize - 1), i.e. 4095 on x86. * On Windo ...

  4. Oracle和Mysql的区别 转载

    一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取.共享与锁定. mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他se ...

  5. TF录像存储专项测试

    测试环境 移动设备:小米4C 移动设备版本:Android 5.1 IPC版本号:0.1.4110_10.1.1.1.3948 安居小宝版本:Version:2.0.1 测试网络:IPC使用WIFI网 ...

  6. js常用utils

    var utils = { /** * 日期格式化 * * @param {Date} date 指定日期 * @param {String} format * @returns {String} * ...

  7. [SoapUI] Loop a test with different sets of data

  8. [SoapUI] 获取Cookie,并循环遍历当前Project下所有的Test Suite,Test Case,Test Step,将Cookie传递给这些Test Step

    import com.eviware.soapui.support.types.StringToStringMap //Get all th cookies in the response , her ...

  9. maven 引用本地jar

    1.添加lib文件夹在src文件夹中.2.拷贝所需要的test.jar包到lib文件夹.3.在pom文件加入如下依赖 <!--添加本地私有包--><dependency> &l ...

  10. 引用数据类型(类)和ArrayList

    引用数据类型(类) 类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Scanner类等,这些已存在的类中包含了很多的方法与属性,可供我们使用. 第二种,我们自己创建的类,按照类 ...