P4513 小白逛公园

线段树求最大子段和,由于是动态的且n,m均高达1e5,因此想到线段树

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=5000010;
ll num[N],add[N];
ll n,m;
ll max(ll aa,ll bb){ return aa>bb?aa:bb; }
struct TREE
{ll lx,rx,l,r,sum,ans;
}tree[N];
void build(int k,int left,int right)
{tree[k].l=left;tree[k].r=right;//左右范围if(left==right){tree[k].sum=tree[k].lx=tree[k].rx=tree[k].ans=num[left];return ;}int mid=(left+right)>>1;//二分拓展build(k*2,left,mid);build(k*2+1,mid+1,right);tree[k].sum=tree[k*2].sum+tree[k*2+1].sum;tree[k].lx=max(tree[k*2].lx,tree[k*2].sum+tree[k*2+1].lx);tree[k].rx=max(tree[k*2+1].rx,tree[k*2+1].sum+tree[k*2].rx);tree[k].ans=max(max(tree[k*2].ans,tree[k*2+1].ans),tree[k*2].rx+tree[k*2+1].lx);
}TREE query(int k,int x,int y)
{if(x<=tree[k].l&&tree[k].r<=y) return tree[k];TREE a,b,res;a.lx=a.rx=a.ans=a.ans=-1e9*2;b.lx=b.rx=b.ans=b.ans=-1e9*2;a.sum=b.sum=res.sum=0;res.ans=-1e9*2;ll mid=(tree[k].l+tree[k].r)>>1;if(x<=mid){a=query(k*2,x,y);res.sum+=a.sum;}if(y>=mid+1){b=query(k*2+1,x,y);res.sum+=b.sum;}res.ans=max(a.rx+b.lx,max(a.ans,b.ans));res.lx=max(a.lx,a.sum+b.lx);res.rx=max(b.rx,b.sum+a.rx);if(x>mid) res.lx=max(res.lx,b.lx);if(y<mid) res.rx=max(res.rx,a.rx);return res;
}
void change(ll k,ll x,ll y,ll ad,ll w)
{if(ad<x||ad>y)return ;else if(x==ad&&y==ad){tree[k].lx=tree[k].rx=tree[k].sum=tree[k].ans=w;return;}else{ll mid=(x+y)>>1;change(k*2,x,mid,ad,w);change(k*2+1,mid+1,y,ad,w);tree[k].sum=tree[k*2].sum+tree[k*2+1].sum;tree[k].lx=max(tree[k*2].lx,tree[k*2].sum+tree[k*2+1].lx);tree[k].rx=max(tree[k*2+1].rx,tree[k*2+1].sum+tree[k*2].rx);tree[k].ans=max(max(tree[k*2].ans,tree[k*2+1].ans),tree[k*2].rx+tree[k*2+1].lx);return;}
}
int main()
{ios::sync_with_stdio(0);cin>>n>>m;for(int i=1; i<=n; i++) cin>>num[i];build(1,1,n);for(int i=1; i<=m; i++){ll op,x,y;cin>>op>>x>>y;if(op==1){if(x>y)swap(x,y);TREE qwq=query(1,x,y);cout<<qwq.ans<<endl;}else change(1,1,n,x,y);}return 0;
}

公园遛狗(小 * 逛公园)相关推荐

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

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

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

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

  3. video safari不支持吗_您支持吗? 公园遛狗纳入 “不文明行为黑名单”

    近日,北京市发布了"不文明游园行为黑名单",此次发布的不文明游园行为黑名单包括翻越围墙.栏杆.绿篱,在禁烟区吸烟,在非游泳区游泳,在非滑冰区滑冰,在非钓鱼区钓鱼,在非体育运动场所踢 ...

  4. 【YbtOJ 线段树 - 2】公园遛狗

    公园遛狗 题目 输入 输出 小白每出去玩一次,都对应输出一行,只包含一个整数,表示小白可以选出的公园得分和的最大值 输入样例 5 3 1 2 -3 4 5 1 2 3 2 2 -1 1 2 3 输出样 ...

  5. TYVJ1427 小白逛公园

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

  6. vijos 1083 小白逛公园

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

  7. P4513 小白逛公园

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

  8. JZOJ 5475. 【NOIP2017提高组正式赛】逛公园

    Description 策策同学特别喜欢逛公园.公园可以看成一张n个点m条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,n号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的 ...

  9. 【NOIP2017】逛公园 拆点最短路+拓扑(记忆化搜索

    题目描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策 ...

最新文章

  1. 人脸检测识别文献阅读总结
  2. PHP设计模式之装饰模式(Decorator)
  3. jFreeChary初探
  4. Kotlin实战指南十二:data class
  5. DCMTK:测试CT Table Dynamics FG类
  6. 使用FFMPEG SDK解码流数据获得YUV数据及其大小
  7. ag 搜索工具参数详解
  8. linux系统编程之文件与I/O(六):fcntl 函数与文件锁
  9. 在linux下一般用scp这个命令来通过ssh传输文件
  10. @keyframes关键帧动画(animation)
  11. Python MySQL 数据库
  12. 用c#算成绩的总和_用c#编写输出成绩的总分和平均分
  13. Java 删除文件 被占用 已解决
  14. BT5无法启动图形界面问题
  15. 【WPS】excel 使用MD5宏 windows环境
  16. hdu5064 Find Sequence 单调性dp
  17. 如何助力鸿蒙发展,实话实说:华为以一已之力,能不能推动鸿蒙系统的发展 - 区块网...
  18. Q1财报蛋壳公寓再亏损:盈利死穴如何破?
  19. 360°环视性能倍增,瑞芯微首发全景环视芯片方案
  20. js判断网络链接的四种方法

热门文章

  1. 微信小程序使用函数的三种方法
  2. 学院开展计算机基础知识比赛,信阳师范学院顺利举办第七届计算机基础知识决赛...
  3. Unity设置和显示FPS
  4. SQL,从熟练到掌握
  5. Allegro PCB的5种形状Symbol类型
  6. 寒门能出贵子的关键在哪里
  7. JVM——GC算法原理
  8. 整理: 显示面板行业英文简称解析
  9. 计算机网络原理 谢希仁(第8版)第三章习题答案
  10. 备战双十一!自动刷喵币靠这一个脚本就够了!