公园遛狗 / 小白逛公园【线段树】
>Link
ybtoj公园遛狗
luogu P4513
这道题我做的时候只想到了build、insert怎么写,ask看了书以后写的(真的好巧妙T)
#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;
}
公园遛狗 / 小白逛公园【线段树】相关推荐
- 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园
公园遛狗 / 小白逛公园 题目链接:ybt高效进阶4-4-3 / luogu P4513 题目大意 给你一个序列,要维护两个操作. 单点修改和在一个区间中找权值最大的子区间的权值. 思路 其实这个是很 ...
- 【YbtOJ 线段树 - 2】公园遛狗
公园遛狗 题目 输入 输出 小白每出去玩一次,都对应输出一行,只包含一个整数,表示小白可以选出的公园得分和的最大值 输入样例 5 3 1 2 -3 4 5 1 2 3 2 2 -1 1 2 3 输出样 ...
- 公园遛狗(小 * 逛公园)
P4513 小白逛公园 线段树求最大子段和,由于是动态的且n,m均高达1e5,因此想到线段树 #include<bits/stdc++.h> using namespace std; #d ...
- TYVJ1427 小白逛公园
P1427 小白逛公园 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路&qu ...
- video safari不支持吗_您支持吗? 公园遛狗纳入 “不文明行为黑名单”
近日,北京市发布了"不文明游园行为黑名单",此次发布的不文明游园行为黑名单包括翻越围墙.栏杆.绿篱,在禁烟区吸烟,在非游泳区游泳,在非滑冰区滑冰,在非钓鱼区钓鱼,在非体育运动场所踢 ...
- P4513 小白逛公园 (线段树)
题目链接 Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 \(4\) 个变量: \(amx\) 代表当前节点的最大值. \(lmx\) 代表当前节点以左端点为起点的区间最大值. ...
- 【BZOJ】1756: Vijos1083 小白逛公园(线段树)
题目 传送门:QWQ 分析 线段树维护一下最大子序列 维护一下最大前缀 最大后缀 区间和 就ok了 好像只能用结构体..... 代码 #include <bits/stdc++.h> u ...
- vijos 1083 小白逛公园
描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路",路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根 ...
- P4513 小白逛公园
题目描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦- 在小新家附近有一条"公园路",路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始, ...
最新文章
- linux下如何查看系统和内核版本
- .NET Framework终于开源了!
- DCMTK:压缩DICOM文件
- Error:Could not resolve all files for configuration ':app:preDebugCompileClasspath'. Could not fin
- vue之filter用法
- java未知变量的类型_Java语言中类、变量及方法的声明 | 学步园
- 2008安装完了找不到_【专业性】关于铸铝热水锅炉安装使用的思考
- ATT ECOMP与Open-O相互掣肘
- 史上最全的黑苹果系统「MacOS」安装教程,小白也能秒掌握!
- Hadoop集群搭建(六):hadoop配置namenode服务
- 数字图像处理(2)——数字图像获取
- 环评图件制作业务承接(生态影响评价)
- diskgenius数据恢复软件,亲测可用!
- android app消息推送,如何进行app消息推送(push)?
- linux文件系统与磁盘(五)分区的取消挂载、调整分区大小
- 微信扫码支付 支付模式二
- MetLife - 美国大都会人寿保险公司
- OpenLDAP+freeradius+samba+802.1x实现无线和有线网络认证+动态vlan下发——openLDAP篇
- STL——STL简介、STL六大组件
- 毕业设计源码基于Spring Boot的旅游管理系统的实现
热门文章
- 推荐几个不错的黑科技网站
- 间谍用GAN生成“红发美女”!潜入美国政坛,全网广钓政客
- 微信小程序:用户头像的更改与保存
- 7-32 哥尼斯堡的“七桥问题” c语言
- [React 基础系列] 受控表单 vs 不受控表单
- ESP32-CAM MicroPython配新板出现的PSRAM问题
- THREEJS相关3d-force-graph 3d力导图使用
- 使用记录6_发布微信小游戏
- python在单词表中查找包含所有元音字母aeiou的单词并打印
- poscms清除html,POSCMS开源内容管理系统 v3.6.0 升级说明