描述

小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着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
Copy

样例输出1

2
-1
Copy

限制

各个测试点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 小白逛公园相关推荐

  1. TYVJ1427 小白逛公园

    P1427 小白逛公园 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路&qu ...

  2. 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园

    公园遛狗 / 小白逛公园 题目链接:ybt高效进阶4-4-3 / luogu P4513 题目大意 给你一个序列,要维护两个操作. 单点修改和在一个区间中找权值最大的子区间的权值. 思路 其实这个是很 ...

  3. P4513 小白逛公园

    题目描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦- 在小新家附近有一条"公园路",路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始, ...

  4. 公园遛狗 / 小白逛公园【线段树】

    >Link ybtoj公园遛狗 luogu P4513 >解题思路 这道题我做的时候只想到了build.insert怎么写,ask看了书以后写的(真的好巧妙T) 单点修改+区间查询使我们想 ...

  5. 洛谷P4513 小白逛公园

    区间最大子段和模板题.. 维护四个数组:prefix, suffix, sum, tree 假设当前访问节点为cur prefix[cur]=max(prefix[lson],sum[lson]+pr ...

  6. P4513 小白逛公园 (线段树)

    题目链接 Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 \(4\) 个变量: \(amx\) 代表当前节点的最大值. \(lmx\) 代表当前节点以左端点为起点的区间最大值. ...

  7. 【BZOJ】1756: Vijos1083 小白逛公园(线段树)

    题目 传送门:QWQ 分析 线段树维护一下最大子序列 维护一下最大前缀 最大后缀  区间和 就ok了 好像只能用结构体..... 代码 #include <bits/stdc++.h> u ...

  8. 公园遛狗(小 * 逛公园)

    P4513 小白逛公园 线段树求最大子段和,由于是动态的且n,m均高达1e5,因此想到线段树 #include<bits/stdc++.h> using namespace std; #d ...

  9. 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)

    链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...

最新文章

  1. 金九银十铁12,看完弄懂,工资少说加 5K
  2. 《高性能网站建设指南》学习笔记
  3. python dlib学习(十):换脸
  4. 图表控件 c++_用C/C++编写16位虚拟内核
  5. 1.1 小巩的疑惑
  6. MongoDB入门教程(1)
  7. Mysql数据库常用命令,mysql速学实用教程。
  8. JMeter中如何实现跨线程组关联
  9. python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)
  10. Inno Setup 软件安装包制作
  11. 数据绑定之DataFormatString
  12. IPC 38模组板图分析-雄迈IPG-50H10PE-SL-Hi3518E+OV9712
  13. 漫谈多模光纤类型:OM1、OM2、OM3、OM4、OM5,深度好文,值得阅读
  14. adams功能区不显示_Word 空白的页面显示与隐藏,与五种试图的简介操作技巧
  15. php的include once,php include_once的使用方法详解
  16. 盒子模型(Box Model)
  17. spark scala 求整列的总和值
  18. INT303 Big Data 个人笔记
  19. Flutter(十六)——Hero动画
  20. 吃鸡ios和android灵敏度,2021吃鸡最佳灵敏度

热门文章

  1. mysql old key files_mysql出现“Incorrect key file for table”解决办法
  2. 刷新table数据_关于数据透视表的刷新功能最值得了解的几个操作
  3. python 装饰器的讲解
  4. dgi数据治理_国外数据治理模型比较
  5. python消息中间件activemq_消息中间件ActiveMQ和JMS基础
  6. 人工智能和python_其实Python和人工智能是这样的
  7. python turtle 画数字8_turtle库的常用方法
  8. python 二维列表从小到大_给Python开发者准备的110道面试题
  9. 导入maven项目报错无法运行
  10. Spring框架学习笔记08:基于Java配置方式使用Spring MVC