【BZOJ】1756: Vijos1083 小白逛公园(线段树)
题目
传送门:QWQ
分析
线段树维护一下最大子序列
维护一下最大前缀 最大后缀 区间和 就ok了
好像只能用结构体。。。。。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int val[maxn<<] ;
struct Node{
int left,right,maxv,sum;
}tree[maxn<<];
void update(int o,int l,int r){
tree[o].sum=tree[o<<].sum+tree[o<<|].sum;
tree[o].left=max(tree[o<<].left,tree[o<<].sum+tree[o<<|].left);
tree[o].right=max(tree[o<<|].right,tree[o<<|].sum+tree[o<<].right);
tree[o].maxv=max(tree[o<<].right+tree[o<<|].left,max(tree[o<<].maxv,tree[o<<|].maxv));
}
void build(int o,int l,int r){
if(l==r){tree[o].sum=tree[o].left=tree[o].right=tree[o].maxv=val[l];return;}
int mid=l+r>>;
build(o<<,l,mid); build(o<<|,mid+,r);
update(o,l,r);
}
void modify(int o,int l,int r,int v,int L){
if(l>L||r<L) return;
if(l==r){ tree[o].sum=tree[o].left=tree[o].right=tree[o].maxv=v; return;}
int mid=l+r>>;
modify(o<<,l,mid,v,L); modify(o<<|,mid+,r,v,L);
update(o,l,r);
}
Node query(int o,int l,int r,int L,int R){
if(L<=l&&R>=r) return tree[o];
int mid=l+r>>;
if(R<=mid) return query(o<<,l,mid,L,R);
else if(L>mid) return query(o<<|,mid+,r,L,R);
else{
Node res1=query(o<<,l,mid,L,R),res2=query(o<<|,mid+,r,L,R);
Node res;
res.sum=res1.sum+res2.sum;
res.left=max(res1.left,res1.sum+res2.left);
res.right=max(res2.right,res2.sum+res1.right);
res.maxv=max(res1.right+res2.left,max(res1.maxv,res2.maxv));
return res;
}
} int main(){
int n,m;scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&val[i]);
build(,,n);
int k,a,b;
while(m--){
scanf("%d%d%d",&k,&a,&b);
if(k==){if(a>b) swap(a,b); printf("%d\n",query(,,n,a,b).maxv);}
else modify(,,n,b,a);
}
}
【BZOJ】1756: Vijos1083 小白逛公园(线段树)的更多相关文章
- 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 ...
- [日常摸鱼]Vijos1083小白逛公园-线段树
题意:单点修改,询问区间最大子段和,$n\leq 5e5$ 考虑分治的方法$O(nlogn)$求一次最大子段和的做法,我们是根据中点分成左右两个区间,那么整个区间的答案要么是左边答案,要么是右边答案, ...
- Vijos 1083 小白逛公园(线段树)
线段树,每个结点维护区间内的最大值M,和sum,最大前缀和lm,最大后缀和rm. 若要求区间为[a,b],则答案max(此区间M,左儿子M,右儿子M,左儿子rm+右儿子lm). ----------- ...
- [vijos]1083小白逛公园<线段树>
描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的风景给每个公 ...
- P4513 小白逛公园 (线段树)
题目链接 Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 \(4\) 个变量: \(amx\) 代表当前节点的最大值. \(lmx\) 代表当前节点以左端点为起点的区间最大值. ...
- 线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园
题面:小白逛公园 题解: 对于线段树的每个节点除了普通线段树该维护的东西以外,额外维护lsum(与左端点相连的最大连续区间和).rsum(同理)和sum……就行了 代码: #include<cs ...
- 【线段树】bzoj1756 Vijos1083 小白逛公园
我们知道,求一段序列的最大子段和是O(n)的,但是这样是显然会超时的. 我们需要一个数据结构来支持修改和计算的操作,对于这种修改一个而查询区间的问题,考虑使用线段树. 在线段树中,除了左端点,右端点, ...
- bzoj1756 Vijos1083 小白逛公园
Description 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路",路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. ...
随机推荐
- Linux的硬链接和软链接
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link), 也就是软链接.默认情况下,ln命令产生硬链接. [硬连接]硬连 ...
- R语言数据去重
R语言常用的去重命令有unique duplicated unique主要是返回一个把重复元素或行给删除的向量.数据框或数组 > x <- c(3:5, 11:8, 8 + 0:5)> ...
- Symmetric Tree,对称树
问题描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...
- (CLR via C#学习笔记)线程基础
一 使用线程的理由 1.可响应性(通常是对于客户端GUI应用程序);2.性能,多个CPU(或多核CPU)能并发执行多个线程,同时执行多个操作能提升性能. 二 线程开销 线程有空间(内存耗用)和时间(运 ...
- [转]VS2015编译的程序在其他机器上缺少msvcp120.dll
http://www.lai18.com/content/1159618.html 1. 今天分享一个自己在开发过程中遇到的困难. 用VS2015开发了一个windows客户端(win32项目),在自 ...
- python学习笔记(HTMLTestRunner在Py3的兼容)
博主最近开始重构自动化框架并且向Py3上兼容 第一个问题就是生成测试报告的HTMLTestRunner,由于此模块是基于Py2开发的,这里需要修改源码 # 94行 # import StringIO ...
- shell sort命令
用法:sort [选项]... [文件]...串联排序所有指定文件并将结果写到标准输出. 排序选项: -b, --ignore-leading-blanks 忽略前导的空白区域 -d, --dicti ...
- 移动APP测试要点总结
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- bzoj-3195-状压dp
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 600 Solved: 395[Submit][Statu ...
- HDU 4540 线性DP
威威猫系列故事——打地鼠 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...