【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个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. ...
随机推荐
- Ubuntu终端常用的快捷键,光标移动到开始位置
光标操作,实用 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 删除 Ctrl+k 删除此处至末尾的所有内容 Ctrl+u 删除此处至开始的所有内容 删除单个 Ctrl+d 删除当前 ...
- Eclipse.修改项目的JDK版本
1.我实际使用过程中,只是修改了 项目右键-->Properties-->左侧选择"Java Compiler" -->右侧的"JDK Complian ...
- [原][osgearth]API加载earth文件的解析
参考:http://blog.csdn.net/cccstudyer/article/details/17691893 通过\src\osgEarthDrivers\earth\ReaderWrite ...
- 最近公共祖先问题 LCA
2018-03-10 18:04:55 在图论和计算机科学中,最近公共祖先,LCA(Lowest Common Ancestor)是指在一个树或者有向无环图中同时拥有v和w作为后代的最深的节点. 计算 ...
- python学习笔记(日志系统实现)
博主今天在自己的接口自动化框架中添加了日志系统 基于python自带的logging库.包括日志主函数.生成日志文件: # -*- coding: utf-8 -*- # 日志系统 # 时间:2017 ...
- Spring MVC文件上传教程 commons-io/commons-uploadfile
Spring MVC文件上传教程 commons-io/commons-uploadfile 用到的依赖jar包: commons-fileupload 1.3.1 commons-io 2.4 基于 ...
- Rails Guide -- Ruby on Rake(未详细阅读)
一个软件task管理和build 自动化的工具. 它允许用户指定tasks和describe dependencies, 也可以在一个namespace中group tasks. 使用Ruby语言写的 ...
- linux三尖刀
序 我们都知道,一个可执行程序的基本的生命过程是如此的: (编辑)源文件--->(编译)目标文件--->(链接)可执行文件--->(调试排错)稳定执行 所以,在这个过程中,我们很容易 ...
- SCWS中文分词PHP扩展详细安装说明
因最近写的一段代码,需要用到中文分词,在网上找了一下,发现了scws这个不错的插件,故根据文档安装使用,下面记录下安装的全过程 系统:centos 安装scws wget http://www.xun ...
- mongodb 之linux下安装、启动、停止、连接
今天在linux上面安装了mongodb 1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # ta ...