TYVJ 1427 线段树的基本操作
题意:
单点修改,区间最值
思路:
线段树
原题请戳这里
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LSON l,mid,lson
#define RSON mid+1,r,rson
#define N 500000
#define inf 0x3fffffff
using namespace std;
int n,m,jy,xx,yy,RANS,ANS;
int tree[N*4],lmax[N*4],rmax[N*4],maxx[N*4],sum[N*4];
void push_up(int pos,int lson,int rson){
sum[pos]=sum[lson]+sum[rson];
rmax[pos]=max(rmax[rson],sum[rson]+rmax[lson]);
lmax[pos]=max(lmax[lson],lmax[rson]+sum[lson]);
maxx[pos]=max(maxx[lson],max(maxx[rson],rmax[lson]+lmax[rson]));
}
void build(int l,int r,int pos){
if(l==r){
scanf("%d",&tree[pos]);
lmax[pos]=rmax[pos]=sum[pos]=maxx[pos]=tree[pos];
return;
}
int mid=(l+r)/2,lson=pos<<1,rson=pos<<1|1;
build(LSON);build(RSON);
push_up(pos,lson,rson);
}
void query(int l,int r,int pos){
if(l>=xx&&r<=yy){
ANS=max(ANS,max(maxx[pos],RANS+lmax[pos]));
RANS=max(rmax[pos],RANS+sum[pos]);
return;
}
int mid=(l+r)/2,lson=pos<<1,rson=pos<<1|1;
if(mid<xx)query(RSON);
else if(mid>=yy)query(LSON);
else query(LSON),query(RSON);
}
void update(int l,int r,int pos){
if(l==r){
lmax[pos]=rmax[pos]=sum[pos]=maxx[pos]=tree[pos]=yy;
return;
}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid<xx)update(RSON);
else update(LSON);
push_up(pos,lson,rson);
}
int main(){
scanf("%d%d",&n,&m);
build(1,n,1);
while(m--){
scanf("%d%d%d",&jy,&xx,&yy);
if(jy==1){
if(xx>yy)swap(xx,yy);
ANS=RANS=-inf;
query(1,n,1);
printf("%d\n",ANS);
}
else
update(1,n,1);
}
}
TYVJ 1427 线段树的基本操作的更多相关文章
- HDOJ-1754(简单线段树)
最近开始重新学习线段树,先从最简单的开始吧! I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 数据结构3——浅谈zkw线段树
线段树是所有数据结构中,最常用的之一.线段树的功能多样,既可以代替树状数组完成"区间和"查询,也可以完成一些所谓"动态RMQ"(可修改的区间最值问题)的操作.其 ...
- 线段树(segment_tree)
线段树之——区间修改区间查询 1.概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,基本能保证每个操作的复杂度为O(lgN). 线段树是 ...
- HDU - 1698 线段树区间修改,区间查询
这就是很简单的基本的线段树的基本操作,区间修改,区间查询,对区间内部信息打上laze标记,然后维护即可. 我自己做的时候太傻逼了...把区间修改写错了,对给定区间进行修改的时候,mid取的是节点的左右 ...
- Vasya and a Tree CodeForces - 1076E(线段树+dfs)
I - Vasya and a Tree CodeForces - 1076E 其实参考完别人的思路,写完程序交上去,还是没理解啥意思..昨晚再仔细想了想.终于弄明白了(有可能不对 题意是有一棵树n个 ...
- CF438D 线段树 区间求和,区间求膜,单点更新
题目链接 题目大意: 给定一个长度为n的序列,要求能够执行m次下列操作: 1.查询区间[l,r]的和 2.将区间[l,r]的每一个数%=mod 3.修改第x个数为y 操作1,3都是线段树的基本操作,线 ...
- HDU 3577Fast Arrangement(线段树模板之区间增减更新 区间求和查询)
Fast Arrangement Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 【数据结构系列】线段树(Segment Tree)
一.线段树的定义 线段树,又名区间树,是一种二叉搜索树. 那么问题来了,啥是二叉搜索树呢? 对于一棵二叉树,若满足: ①它的左子树不空,则左子树上所有结点的值均小于它的根结点的值 ②若它的右子树不空, ...
- 线段树(Segment Tree)(转)
原文链接:线段树(Segment Tree) 1.概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,基本能保证每个操作的复杂度为O(lg ...
随机推荐
- DNN:windows使用 YOLO V1,V2
本文有修改,如有疑问,请移步原文. 原文链接: YOLO v1之总结篇(linux+windows) 此外: YOLO-V2总结篇 Yolo9000的改进还是非常大的 由于原版的官方YOLOv ...
- 三维重建:SLAM的粒度和工程化问题
百度百科的定义.此文引用了其他博客的一些图像,如有侵权,邮件联系删除. 申明一下,SLAM不是一个算法,而是一个工程. 在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由 ...
- C# 检测dll的新版本号方法
FileVersionInfo info = FileVersionInfo.GetVersionInfo(YourFileNameHere);string version = info.FileMa ...
- 关于MySQL Server影响ASP.NET网站使用的问题:未能加载文件或程序集MySql.Web.v20
最近开发的ASP.NET MVC 4网站,之前头头说如果遇到装过MySQL的机器就绕着走,还觉得奇怪 嘛,该来的迟早都会来 于是撞上了一台 启动网站再访问,总是出错,提示“未能加载文件或程序集”,名字 ...
- linux配置Jdk1.8
Jdk1.8:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html cd /usr/ ...
- 56.doc values
主要知识点 doc values 搜索的时候,要依靠倒排索引:在54小节中写到在聚合排序的时候如果仅仅依靠倒排索引的话是不能得出准确的结果的,需要依靠正排索引,所谓的正排索引,其实就是doc ...
- PHP AES cbc模式 pkcs7 128加密解密
今天在对接一个第三方接口的时候,对方需要AES CBC模式下的加密.这里简单写一个demo class Model_Junjingbao extends Model { private static ...
- Atcoder ARC 082C/D
C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...
- Docker学习总结(16)——当当网Docker应用实践
随着Docker成为当下热门的容器技术,各大公司以及中小团队都开始选择Docker来进行应用部署,从原有部署方式迁移到Docker方式过程中难免会遇到各种问题,本次分享主要介绍当当网个性化推荐组应用D ...
- HDU 4359 Easy Tree DP?
Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...