tuzhewen @ 2020-07-26 12:25:04
#include<bits/stdc++.h>
#define F(i,l,r) for(register int i=l;i<=r;i++)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define p_b push_back
#define m_p make_pair
#define il inline
using namespace std;
const int N=500005;
int n,m;
int k,u,v;
int a[N];
ll ans[N],pre[N],suff[N],sum[N];
int fr() {
char ch=getchar();
int num=0;
int k=1;
while((ch>'9'||ch<'0')&&ch!='-') ch=getchar();
if(ch=='-') {
k=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0') {
num=num*10+ch-'0';
ch=getchar();
}
return num*k;
}
il int ls(int x) {return x<<1;}
il int rs(int x) {return x<<1|1;}
il void push_up(int p) {
sum[p]=sum[ls(p)]+sum[rs(p)];
pre[p]=max(pre[ls(p)],sum[ls(p)]+pre[rs(p)]);
suff[p]=max(suff[rs(p)],sum[rs(p)]+suff[ls(p)]);
ans[p]=max(max(ans[ls(p)],ans[rs(p)]),pre[rs(p)]+suff[ls(p)]);
}
il void build(int p,int l,int r) {
if(l==r) {
ans[p]=pre[p]=suff[p]=sum[p]=a[l];
return ;
}
int mid=(l+r)>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
push_up(p);
}
il void upd(int pos,int p,int l,int r,int k) {
if(l==r) {
ans[p]=pre[p]=suff[p]=sum[p]=k;
return ;
}
int mid=(l+r)>>1;
if(pos<=mid) upd(pos,ls(p),l,mid,k);
else upd(pos,rs(p),mid+1,r,k);
push_up(p);
}
ll now,lst;
il void query(int ql,int qr,int p,int l,int r) {
if(ql<=l&&qr>=r) {
now=max(now,max(ans[p],lst+pre[p]));
lst=max(suff[p],lst+sum[p]);
return ;
}
int mid=(l+r)>>1;
if(ql<=mid) query(ql,qr,ls(p),l,mid);
if(qr>mid) query(ql,qr,rs(p),mid+1,r);
}
int main() {
n=fr(),m=fr();
F(i,1,n) a[i]=fr();
build(1,1,n);
while(m--) {
k=fr(),u=fr(),v=fr();
if(u>v) swap(u,v);
if(k==1) {
now=lst=-1e15-7;
query(u,v,1,1,n);
printf("%lld\n",now);
}
else if(k==2) upd(u,1,1,n,v);
}
return 0;
}
by tuzhewen @ 2020-07-26 12:25:15
离线等,不急/fad
by 我叫SB @ 2020-07-26 12:31:41
??????????????? 厉害
by 我叫SB @ 2020-07-26 12:33:46
这题在求什么
by 我叫SB @ 2020-07-26 12:34:33
@tuzhewen
by 我叫SB @ 2020-07-26 12:37:44
在吗
by 我叫SB @ 2020-07-26 12:38:58
应用 题库 题单 比赛 记录 讨论
洛谷 / 题目列表 / 题目详情 P4513 小白逛公园 提交 5.26k 通过 1.77k 时间限制 1.00s 内存限制 128.00MB 提交答案 加入收藏 题目提供者 huhao
难度 提高+/省选- 历史分数 无 提交记录 查看题解 标签
查看算法标签 进入讨论版 相关讨论 查看讨论 推荐题目 查看推荐
洛谷推荐 关闭 展开 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着 nn n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了。 一开始,小白就根据公园的风景给每个公园打了分-.-。小新为了省事,每次遛狗的时候都会事先规定一个范围,小白只可以选择第 aa a个和第 bb b个公园之间(包括 aa a、 bb b两个公园)选择连续的一些公园玩。小白当然希望选出的公园的分数总和尽量高咯。同时,由于一些公园的景观会有所改变,所以,小白的打分也可能会有一些变化。 那么,就请你来帮小白选择公园吧。 输入格式 第一行,两个整数 NN N和 MM M,分别表示表示公园的数量和操作(遛狗或者改变打分)总数。 接下来 NN N行,每行一个整数,依次给出小白 开始时对公园的打分。 接下来 MM M行,每行三个整数。第一个整数 KK K, 11 1或 22 2。 K=1K=1 K=1表示,小新要带小白出去玩,接下来的两个整数 aa a和 bb b给出了选择公园的范围( 1≤a,b≤N1≤a,b≤N 1≤a,b≤N)。测试数据可能会出现 a>ba>b a>b的情况,需要进行交换; K=2K=2 K=2表示,小白改变了对某个公园的打分,接下来的两个整数 pp p和 ss s,表示小白对第 pp p个公园的打分变成了 ss s( 1≤p≤N1≤p≤N 1≤p≤N)。 其中, 1≤N≤5000001≤N≤500 000 1≤N≤500000, 1≤M≤1000001≤M≤100 000 1≤M≤100000,所有打分都是绝对值不超过 10001000 1000的整数。 输出格式 小白每出去玩一次,都对应输出一行,只包含一个整数,表示小白可以选出的公园得分和的最大值。 输入输出样例 输入 #1 复制 5 3 1 2 -3 4 5 1 2 3 2 2 -1 1 2 3 输出 #1 复制 2 -1
在洛谷, 享受Coding的欢乐
关于洛谷 | 帮助中心 | 用户协议 | 联系我们 小黑屋 | 陶片放逐 | 社区规则 | 招贤纳才 Developed by the Luogu Dev Team 2013-2020 , © 洛谷 增值电信业务经营许可证 沪B2-20200477 沪ICP备18008322号 All rights reserved.
by Aw顿顿 @ 2020-07-26 13:06:39
@13805989291zyy
宁来这里干什么?看不懂题还要在别人的求助帖里水吗?
宁就是 xxs 吧?一通回复有一个有意义的吗???
用户 13805989291zyy 申请加入团队 07-25 19:56 13805989291zyy 申请加入 【数据删除】 团队,验证信息是【?????????】,请尽快处理。
用户 13805989291zyy 申请加入团队 07-25 19:54 13805989291zyy 申请加入 【数据删除】 团队,验证信息是【张奕洋 小学6年级 塔防爱好者】,请尽快处理。
这个乱加团的就是你吧?加团队不看要求的啊?
宁能不能不要到处惹是生非了???
by KellyFrog @ 2020-07-26 13:06:48
@13805989291zyy ???
by 警策看取 @ 2020-07-26 13:15:41
@Aw顿顿
请自删,上面的那个 xxs。@13805989291zyy
似乎过了20分钟了……
by Aw顿顿 @ 2020-07-26 13:16:44
@Jimmy_Lian 啊,那就算了(