>Link

ybtoj公园遛狗

luogu P4513


>解题思路

这道题我做的时候只想到了build、insert怎么写,ask看了书以后写的(真的好巧妙T)

单点修改+区间查询使我们想到了线段树
但是简单的线段树是不能实现的,因为我们要求的是 最大区间和
我们知道在一个大区间内,最大区间和有一下三种midmidmid分布情况:

情况1、2:直接从左/右儿子转移过来,取max值
情况3:我们要知道左儿子的最大连续后缀和,右儿子的最大连续前缀和
所以我们要维护线段树中的 总和sumsumsum,最大区间和maxnmaxnmaxn,包含左端点的最大区间和maxlmaxlmaxl,包含右端点的最大区间和maxrmaxrmaxr
那么转移式就很容易推出来了

说一下我不会的ask:
要求区间被midmidmid分成两段(不规则)怎么求最大区间和?
其实也很简单,ask函数与线段树定义成同一类型,每次ask返回当前区间内我们要求的那一部分处理后的新的结构体,就是把不规则的那一部分建立新的整体,返回时父亲就可以用midmidmid两边新的结构体进行更新了


>代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 500010
#define LL long long
using namespace std;struct node
{LL sum, maxn, maxl, maxr;
} t[N * 5];
int n, m;
LL A[N], ans;node add (node a, node b)
{node c;c.sum = a.sum + b.sum;c.maxn = a.maxr + b.maxl;c.maxn = max (c.maxn, max (a.maxn, b.maxn));c.maxl = max (a.maxl, a.sum + b.maxl);c.maxr = max (b.maxr, b.sum + a.maxr);return c;
} //合并左右两边a和b为c
void build (int k, int l, int r)
{if (l == r){t[k] = (node){A[l], A[l], A[l], A[l]};return;}int mid = (l + r) / 2;build (2 * k, l, mid);build (2 * k + 1, mid + 1, r);t[k] = add (t[2 * k], t[2 * k + 1]);
}
void insert (int k, int l, int r, int i, int p)
{if (l == r){t[k] = (node){p, p, p, p};return;}int mid = (l + r) / 2;if (i <= mid) insert (2 * k, l, mid, i, p);else insert (2 * k + 1, mid + 1, r, i, p);t[k] = add (t[2 * k], t[2 * k + 1]);
}
node ask (int k, int l, int r, int ll, int rr)
{if (ll <= l && r <= rr) return t[k];node a, b;int mid = (l + r) / 2;if (ll <= mid && rr > mid){a = ask (2 * k, l, mid, ll, min (rr, mid));b = ask (2 * k + 1, mid + 1, r, max (ll, mid + 1), rr);return add (a, b);} //两边都有if (ll <= mid)return ask (2 * k, l, mid, ll, min (rr, mid));return ask (2 * k + 1, mid + 1, r, max (ll, mid + 1), rr);//只有一边有,直接进行转移
}int main()
{int e, x, y;scanf ("%d%d", &n, &m);for (int i = 1; i <= n; i++) scanf ("%lld", &A[i]);build (1, 1, n);for (int i = 1; i <= m; i++){scanf ("%d%d%d", &e, &x, &y);if (e == 1){if (x > y) swap (x, y);printf ("%lld\n", ask (1, 1, n, x, y).maxn);}else insert (1, 1, n, x, y);}return 0;
}

公园遛狗 / 小白逛公园【线段树】相关推荐

  1. 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园

    公园遛狗 / 小白逛公园 题目链接:ybt高效进阶4-4-3 / luogu P4513 题目大意 给你一个序列,要维护两个操作. 单点修改和在一个区间中找权值最大的子区间的权值. 思路 其实这个是很 ...

  2. 【YbtOJ 线段树 - 2】公园遛狗

    公园遛狗 题目 输入 输出 小白每出去玩一次,都对应输出一行,只包含一个整数,表示小白可以选出的公园得分和的最大值 输入样例 5 3 1 2 -3 4 5 1 2 3 2 2 -1 1 2 3 输出样 ...

  3. 公园遛狗(小 * 逛公园)

    P4513 小白逛公园 线段树求最大子段和,由于是动态的且n,m均高达1e5,因此想到线段树 #include<bits/stdc++.h> using namespace std; #d ...

  4. TYVJ1427 小白逛公园

    P1427 小白逛公园 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路&qu ...

  5. video safari不支持吗_您支持吗? 公园遛狗纳入 “不文明行为黑名单”

    近日,北京市发布了"不文明游园行为黑名单",此次发布的不文明游园行为黑名单包括翻越围墙.栏杆.绿篱,在禁烟区吸烟,在非游泳区游泳,在非滑冰区滑冰,在非钓鱼区钓鱼,在非体育运动场所踢 ...

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

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

  7. 【BZOJ】1756: Vijos1083 小白逛公园(线段树)

    题目 传送门:QWQ 分析 线段树维护一下最大子序列 维护一下最大前缀 最大后缀  区间和 就ok了 好像只能用结构体..... 代码 #include <bits/stdc++.h> u ...

  8. vijos 1083 小白逛公园

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

  9. P4513 小白逛公园

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

最新文章

  1. linux下如何查看系统和内核版本
  2. .NET Framework终于开源了!
  3. DCMTK:压缩DICOM文件
  4. Error:Could not resolve all files for configuration ':app:preDebugCompileClasspath'. Could not fin
  5. vue之filter用法
  6. java未知变量的类型_Java语言中类、变量及方法的声明 | 学步园
  7. 2008安装完了找不到_【专业性】关于铸铝热水锅炉安装使用的思考
  8. ATT ECOMP与Open-O相互掣肘
  9. 史上最全的黑苹果系统「MacOS」安装教程,小白也能秒掌握!
  10. Hadoop集群搭建(六):hadoop配置namenode服务
  11. 数字图像处理(2)——数字图像获取
  12. 环评图件制作业务承接(生态影响评价)
  13. diskgenius数据恢复软件,亲测可用!
  14. android app消息推送,如何进行app消息推送(push)?
  15. linux文件系统与磁盘(五)分区的取消挂载、调整分区大小
  16. 微信扫码支付 支付模式二
  17. MetLife - 美国大都会人寿保险公司
  18. OpenLDAP+freeradius+samba+802.1x实现无线和有线网络认证+动态vlan下发——openLDAP篇
  19. STL——STL简介、STL六大组件
  20. 毕业设计源码基于Spring Boot的旅游管理系统的实现

热门文章

  1. 推荐几个不错的黑科技网站
  2. 间谍用GAN生成“红发美女”!潜入美国政坛,全网广钓政客
  3. 微信小程序:用户头像的更改与保存
  4. 7-32 哥尼斯堡的“七桥问题” c语言
  5. [React 基础系列] 受控表单 vs 不受控表单
  6. ESP32-CAM MicroPython配新板出现的PSRAM问题
  7. THREEJS相关3d-force-graph 3d力导图使用
  8. 使用记录6_发布微信小游戏
  9. python在单词表中查找包含所有元音字母aeiou的单词并打印
  10. poscms清除html,POSCMS开源内容管理系统 v3.6.0 升级说明