vijos 1083 小白逛公园
描述
小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了。
一开始,小白就根据公园的风景给每个公园打了分-.-。小新为了省事,每次遛狗的时候都会事先规定一个范围,小白只可以选择第a个和第b个公园之间(包括a、b两个公园)选择**连续**的一些公园玩。小白当然希望选出的公园的分数总和尽量高咯。同时,由于一些公园的景观会有所改变,所以,小白的打分也可能会有一些变化。
那么,就请你来帮小白选择公园吧。
格式
输入格式
第一行,两个整数N和M,分别表示表示公园的数量和操作(遛狗或者改变打分)总数。
接下来N行,每行一个整数,依次给出小白 开始时对公园的打分。
接下来M行,每行三个整数。第一个整数K,1或2。K=1表示,小新要带小白出去玩,接下来的两个整数a和b给出了选择公园的范围(1≤a,b≤N, a可以大于b!);K=2表示,小白改变了对某个公园的打分,接下来的两个整数p和s,表示小白对第p个公园的打分变成了s(1≤p≤N)。
其中,1≤N≤500 000,1≤M≤100 000,所有打分都是绝对值不超过1000的整数。
输出格式
小白每出去玩一次,都对应输出一行,只包含一个整数,表示小白可以选出的公园得分和的最大值。
样例1
样例输入1
5 3
1 2 -3 4 5
1 2 3
2 2 -1
1 2 3
样例输出1
2
-1
限制
各个测试点2s
--------------
解:线段树;
e数组维护lsum,rsum,msum,sum;
难在query函数,简单情况大家都懂,难的解决方法是:
开三个结构体:tl,tr,tt;
tl:左边对应的情况;
tr:同上;
tt:即为答案;
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using std::max; using std::swap; const int N=500010; struct node {int l,r,lsum,rsum,msum,sum; }e[N<<2]; #define ls ro<<1 #define rs ro<<1|1 inline void pushup(int ro) {e[ro].sum=e[ls].sum+e[rs].sum;e[ro].lsum=max(e[ls].lsum,e[ls].sum+e[rs].lsum);e[ro].rsum=max(e[rs].rsum,e[rs].sum+e[ls].rsum);e[ro].msum=max(max(e[ls].msum,e[rs].msum),e[ls].rsum+e[rs].lsum); } void build(int ro,int l,int r) {e[ro].l=l,e[ro].r=r;if(l==r){int x;scanf("%d",&x);e[ro].lsum=e[ro].rsum=e[ro].msum=e[ro].sum=x;return;}int mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);pushup(ro); } void change(int ro,int x,int p) {if(e[ro].l==e[ro].r){if(e[ro].l==x) e[ro].lsum=e[ro].rsum=e[ro].msum=e[ro].sum=p;return;}int mid=(e[ro].l+e[ro].r)>>1;if(x<=mid) change(ls,x,p);else change(rs,x,p);pushup(ro); } node query(int ro,int l,int r) {node tl,tr,tt;if(e[ro].l==l&&e[ro].r==r) return e[ro];int mid=(e[ro].l+e[ro].r)>>1;if(r<=mid) return query(ls,l,r);else if(mid<l) return query(rs,l,r);else {tl=query(ls,l,mid);tr=query(rs,mid+1,r);tt.msum=max(max(tl.msum,tr.msum),tl.rsum+tr.lsum);tt.lsum=max(tl.lsum,tl.sum+tr.lsum);tt.rsum=max(tr.rsum,tr.sum+tl.rsum); return tt;} } int main() {int n,m;scanf("%d %d",&n,&m);build(1,1,n); // for(int i=1;i<=20;i++) // printf("std:: %d %d %d %d %d %d\n",e[i].l,e[i].r,e[i].lsum,e[i].rsum,e[i].msum,e[i].sum);int dp,l,r;for(int i=1;i<=m;i++){scanf("%d %d %d",&dp,&l,&r);if(dp==1) {if(l>r) swap(l,r);node ans=query(1,l,r);printf("%d\n",ans.msum);}else {change(1,l,r); // for(int i=1;i<=20;i++) // printf("std:: %d %d %d %d %d %d\n",e[i].l,e[i].r,e[i].lsum,e[i].rsum,e[i].msum,e[i].sum); }}return 0; }
vijos 1083
转载于:https://www.cnblogs.com/12fs/p/7683933.html
vijos 1083 小白逛公园相关推荐
- TYVJ1427 小白逛公园
P1427 小白逛公园 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路&qu ...
- 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园
公园遛狗 / 小白逛公园 题目链接:ybt高效进阶4-4-3 / luogu P4513 题目大意 给你一个序列,要维护两个操作. 单点修改和在一个区间中找权值最大的子区间的权值. 思路 其实这个是很 ...
- P4513 小白逛公园
题目描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦- 在小新家附近有一条"公园路",路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始, ...
- 公园遛狗 / 小白逛公园【线段树】
>Link ybtoj公园遛狗 luogu P4513 >解题思路 这道题我做的时候只想到了build.insert怎么写,ask看了书以后写的(真的好巧妙T) 单点修改+区间查询使我们想 ...
- 洛谷P4513 小白逛公园
区间最大子段和模板题.. 维护四个数组:prefix, suffix, sum, tree 假设当前访问节点为cur prefix[cur]=max(prefix[lson],sum[lson]+pr ...
- P4513 小白逛公园 (线段树)
题目链接 Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 \(4\) 个变量: \(amx\) 代表当前节点的最大值. \(lmx\) 代表当前节点以左端点为起点的区间最大值. ...
- 【BZOJ】1756: Vijos1083 小白逛公园(线段树)
题目 传送门:QWQ 分析 线段树维护一下最大子序列 维护一下最大前缀 最大后缀 区间和 就ok了 好像只能用结构体..... 代码 #include <bits/stdc++.h> u ...
- 公园遛狗(小 * 逛公园)
P4513 小白逛公园 线段树求最大子段和,由于是动态的且n,m均高达1e5,因此想到线段树 #include<bits/stdc++.h> using namespace std; #d ...
- 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)
链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...
最新文章
- 金九银十铁12,看完弄懂,工资少说加 5K
- 《高性能网站建设指南》学习笔记
- python dlib学习(十):换脸
- 图表控件 c++_用C/C++编写16位虚拟内核
- 1.1 小巩的疑惑
- MongoDB入门教程(1)
- Mysql数据库常用命令,mysql速学实用教程。
- JMeter中如何实现跨线程组关联
- python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)
- Inno Setup 软件安装包制作
- 数据绑定之DataFormatString
- IPC 38模组板图分析-雄迈IPG-50H10PE-SL-Hi3518E+OV9712
- 漫谈多模光纤类型:OM1、OM2、OM3、OM4、OM5,深度好文,值得阅读
- adams功能区不显示_Word 空白的页面显示与隐藏,与五种试图的简介操作技巧
- php的include once,php include_once的使用方法详解
- 盒子模型(Box Model)
- spark scala 求整列的总和值
- INT303 Big Data 个人笔记
- Flutter(十六)——Hero动画
- 吃鸡ios和android灵敏度,2021吃鸡最佳灵敏度
热门文章
- mysql old key files_mysql出现“Incorrect key file for table”解决办法
- 刷新table数据_关于数据透视表的刷新功能最值得了解的几个操作
- python 装饰器的讲解
- dgi数据治理_国外数据治理模型比较
- python消息中间件activemq_消息中间件ActiveMQ和JMS基础
- 人工智能和python_其实Python和人工智能是这样的
- python turtle 画数字8_turtle库的常用方法
- python 二维列表从小到大_给Python开发者准备的110道面试题
- 导入maven项目报错无法运行
- Spring框架学习笔记08:基于Java配置方式使用Spring MVC