suoi46 最大和和 (线段树)
《Segment tree Beats!》,反正我不会
#include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=4e5+;
const ll inf=1e15+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} ll a[maxn];
int N,M;
ll sum[maxn<<],mn[maxn<<][],se[maxn<<],laz[maxn<<]; inline void update(int p){
sum[p]=sum[p<<]+sum[p<<|];
if(mn[p<<][]==mn[p<<|][]){
mn[p][]=mn[p<<][],mn[p][]=mn[p<<][]+mn[p<<|][];
se[p]=min(se[p<<],se[p<<|]);
}
else if(mn[p<<][]<mn[p<<|][]){
mn[p][]=mn[p<<][],mn[p][]=mn[p<<][];
se[p]=min(se[p<<],mn[p<<|][]);
}
else if(mn[p<<][]>mn[p<<|][]){
mn[p][]=mn[p<<|][],mn[p][]=mn[p<<|][];
se[p]=min(se[p<<|],mn[p<<][]);
}
} void pushdown(int p){
if(!laz[p]) return;
ll x=laz[p];laz[p]=;
if(x<=mn[p][]) return;
laz[p<<]=max(x,laz[p<<]);
laz[p<<|]=max(x,laz[p<<|]);
if(x<se[p]){
sum[p]+=mn[p][]*(x-mn[p][]);
mn[p][]=x;
return;
}
pushdown(p<<);pushdown(p<<|);
update(p); } void change(int p,int l,int r,int x,int y,ll z){
if(x<=l&&r<=y){
laz[p]=max(laz[p],z);
pushdown(p);
}
else{
pushdown(p);
int m=l+r>>;
if(x<=m) change(p<<,l,m,x,y,z);
else pushdown(p<<);
if(y>=m+) change(p<<|,m+,r,x,y,z);
else pushdown(p<<|);
update(p);
}
} void build(int p,int l,int r){
if(l==r){
mn[p][]=sum[p]=a[l];
mn[p][]=,se[p]=inf;
}else{
int m=l+r>>;
build(p<<,l,m);build(p<<|,m+,r);
update(p);
}
} ll query(int p,int l,int r,int x,int y){
pushdown(p);
if(x<=l&&r<=y) return sum[p];
int m=l+r>>;ll re=;
if(x<=m) re=query(p<<,l,m,x,y);
if(y>=m+) re+=query(p<<|,m+,r,x,y);
return re;
} int main(){
//freopen("","r",stdin);
int i;
N=rd(),M=rd();
for(i=;i<=N;i++)
a[i]=rd();
build(,,N);
for(i=;i<=M;i++){
ll a=rd(),b=rd(),c=rd();
if(!a) printf("%lld\n",query(,,N,b,c));
else change(,,N,b,c,a);
}
return ;
}
suoi46 最大和和 (线段树)的更多相关文章
- UVA 1400."Ray, Pass me the dishes!" -分治+线段树区间合并(常规操作+维护端点)并输出最优的区间的左右端点-(洛谷 小白逛公园 升级版)
"Ray, Pass me the dishes!" UVA - 1400 题意就是线段树区间子段最大和,线段树区间合并,但是这道题还要求输出最大和的子段的左右端点.要求字典序最小 ...
- ZOJ 2301 / HDU 1199 Color the Ball 离散化+线段树区间连续最大和
题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑.问最后最长的白色区间的起点和终点的位置. 解法:先离散化 ...
- 求区间连续不超过K段的最大和--线段树+大量代码
题目描述: 这是一道数据结构题. 我们拥有一个长度为n的数组a[i]. 我们有m次操作.操作有两种类型: 0 i val:表示我们要把a[i]修改为val; 1 l r k:表示我们要求出区间[l,r ...
- hdu多校第六场1005 (hdu6638) Snowy Smilel 线段树/区间最大和
题意: 给定一个矩阵,矩阵上有若干点,每个点有正或负的权值,找一个方框框住一些点使得方框中点权值最大. 题解: 离散化横纵坐标,容易将这个问题转化为在矩阵上求最大和子矩阵的问题. 普通的n*n的矩阵的 ...
- 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...
- 【BZOJ-3638&3272&3267&3502】k-Maximum Subsequence Sum 费用流构图 + 线段树手动增广
3638: Cf172 k-Maximum Subsequence Sum Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 174 Solved: 9 ...
- HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...
- 线段树(区间合并) LA 3989 "Ray, Pass me the dishes!"
题目传送门 题意:动态最大连续子序列和,静态的题目 分析:nlogn的归并思想.线段树维护结点的三个信息,最大前缀和,最大后缀和,该区间的最大和的两个端点,然后答案是三个的better.书上用pair ...
- HDU 4819 Mosaic (二维线段树)
Mosaic Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total S ...
随机推荐
- pandas:解决groupby().apply()方法打印两次
对于以下dataframe执行dataframe.groupby(['name', 'course']).apply(lambda x: test(x)) 操作 其中test(x)函数为: def t ...
- SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH
最近公司项目开发了一个微信小程序,并且部署测试OK,由于微信小程序调用的后端接口必须是HTTPS,所以给接口安装了SSL,第一天测试都正常.第二天早上再使用时页面无响应. 抓包发现是后端接口抛出: n ...
- 虚拟机console基础环境配置——系统镜像站点配置
1. 概述2. 部署HTTP服务器2.1 YUM安装httpd2.2 配置httpd2.3 启动httpdf2.4 测试httpd3. 部署FTP服务器3.1 YUM安装vsftpd3.2 配置vsf ...
- restfull环境搭建-helloword(二)
原文地址:http://only81.iteye.com/blog/1689537 本文描述,获取XML或json格式数据 首先,创建一个bean,比如Todo(JAXB自动将bean文件,转换成xm ...
- 牛客多校第二场A run(基础DP)
链接:https://www.nowcoder.com/acm/contest/140/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...
- 【个人阅读作业】软件工程M1/M2总结
链接:”看<快速软件开发>的五个问题“ http://www.cnblogs.com/leiyy/p/4027759.html 一.较为明白的问题 1. 在文章的第一个关于Square_T ...
- 北航学堂Android客户端Beta阶段发布说明
在从学姐那里拿到服务接口的代码最终连通服务器之后,经过我们团队的努力,终于把前后端融合生成了我们目前的版本, 因为我们在Alpha阶段网络连接部分是一直没有搞定的,所以这个版本其实并不算是真正的Bet ...
- Aspose for Maven 使用
https://blog.aspose.com/2014/08/12/aspose-for-maven-aspose-cloud-maven-repository/ https://marketpla ...
- MyBatis 集合操作语法范例:配合SQL的in关键字
Java语法: private String[] tagIds; MyBatis语法 <delete id="deleteByIds" parameterType=" ...
- jquery 加載
load(url,data,callback)從遠程服務器加載數據,并放入到被選中元素上: url是必須有的,希望加載的url: data是可選的,表示和請求一起發送的鍵值對數據: callback是 ...