社区讨论
求调
P1253扶苏的问题参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1qkdv
- 此快照首次捕获于
- 2025/11/03 19:18 4 个月前
- 此快照最后确认于
- 2025/11/03 19:18 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define ls u<<1
#define rs u<<1|1
#define N 1000010
#define inf 100000000000000000011
#define ll long long
ll a[N],w[N*4],lzya[N*4],lzys[N*4],n,q;
void pushup(ll u){
w[u]=max(w[ls],w[rs]);
}
void build(ll u,ll l,ll r){
if(l==r){
w[u]=a[l];
return ;
}
ll mid=(l+r)>>1;
lzys[u]=inf;
build(ls,l,mid),build(rs,mid+1,r);
pushup(u);
}
bool inrange(ll L,ll R,ll l,ll r){
return (l<=L)&&(R<=r);
}
bool outofrange(ll L,ll R,ll l,ll r){
return (L>r)||(R<l);
}
void maketag(ll u,ll x,ll type){
if(type==1){
lzya[u]=0;
lzys[u]=x;
w[u]=x;
}
else{
if(lzys[u]==inf) lzya[u]+=x;
else lzys[u]+=x;
w[u]+=x;
}
}
void pushdown(ll u){
if(lzys[u]==inf){
maketag(ls,lzya[u],2);
maketag(rs,lzya[u],2);
lzya[u]=0;
}
else {
maketag(ls,lzys[u],1);
maketag(rs,lzys[u],1);
lzys[u]=inf;
}
}
void update(ll u,ll L,ll R,ll l,ll r,ll x,ll type){
if(inrange(L,R,l,r)){
maketag(u,x,type);
}
else if(!outofrange(L,R,l,r)){
ll mid=(L+R)>>1;
pushdown(u);
update(ls,L,mid,l,r,x,type);
update(rs,mid+1,R,l,r,x,type);
pushup(u);
}
}
ll query(ll u,ll L,ll R,ll l,ll r){
if(inrange(L,R,l,r)) return w[u];
else if(!outofrange(L,R,l,r)){
ll mid=(L+R)>>1;
pushdown(u);
return max(query(ls,L,mid,l,r),query(rs,mid+1,R,l,r));
}
else return 0;
}
int main(){
scanf("%lld%lld",&n,&q);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
build(1,1,n);
while(q--){
int op;
scanf("%d",&op);
if(op==1){
ll l,r,x;
scanf("%lld%lld%lld",&l,&r,&x);
update(1,1,n,l,r,x,1);
}
else if(op==2){
ll l,r,x;
scanf("%lld%lld%lld",&l,&r,&x);
update(1,1,n,l,r,x,2);
}
else {
ll l,r;
scanf("%lld%lld",&l,&r);
printf("%lld\n",query(1,1,n,l,r));
}
}
return 0;
}
50分求调
回复
共 1 条回复,欢迎继续交流。
正在加载回复...