社区讨论
求条,过不了样例
P1253扶苏的问题参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mko0hp8b
- 此快照首次捕获于
- 2026/01/21 20:41 4 周前
- 此快照最后确认于
- 2026/01/21 20:46 4 周前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf LONG_LONG_MAX
const int N=1e6+10;
int n,m,a[N],ans[N<<2],lz1[N<<2],lz2[N<<2];
// 修改 增加
int ls(int id){return id<<1;}
int rs(int id){return id<<1|1;}
void pushup(int id){ans[id]=max(ans[ls(id)],ans[rs(id)]);}
void bdtree(int id,int l,int r){
lz1[id]=inf;
if(l==r) ans[id]=a[l];
else{
int mid=(l+r)>>1;
bdtree(ls(id),l,mid);
bdtree(rs(id),mid+1,r);
pushup(id);
}
}
void down1(int id,int l,int r){
if(lz1[id]!=inf){
ans[ls(id)]=lz1[id];
ans[rs(id)]=lz1[id];
lz1[ls(id)]=lz1[id];
lz1[rs(id)]=lz1[id];
lz2[ls(id)]=0;
lz2[rs(id)]=0;
lz1[id]=inf;
}
}
void down2(int id,int l,int r){
if(lz2[id]){
down1(id,l,r);
ans[ls(id)]+=lz2[id];
ans[rs(id)]+=lz2[id];
lz2[ls(id)]+=lz2[id];
lz2[rs(id)]+=lz2[id];
lz2[id]=0;
}
}
void pushdown(int id,int l,int r){
down1(id,l,r);
down2(id,l,r);
}
void update1(int id,int l,int r,int L,int R,int k){
if(L<=l&&r<=R){
ans[id]=k;
lz2[id]=0;
lz1[id]=k;
return;
}
pushdown(id,l,r);
int mid=(l+r)>>1;
if(L<=mid) update1(id,l,mid,L,R,k);
if(mid<R) update1(id,mid+1,r,L,R,k);
pushup(id);
}
void update2(int id,int l,int r,int L,int R,int k){
if(L<=l&&r<=R){
down1(id,l,r);
ans[id]+=k;
lz2[id]+=k;
return;
}
pushdown(id,l,r);
int mid=(l+r)>>1;
if(L<=mid) update2(id,l,mid,L,R,k);
if(mid<R) update2(id,mid+1,r,L,R,k);
pushup(id);
}
int query(int id,int l,int r,int L,int R){
if(L<=l&&r<=R) return ans[id];
pushdown(id,l,r);
int mid=(l+r)>>1,now=-inf;
if(L<=mid) now=max(now,query(id,l,mid,L,R));
if(mid<R) now=max(now,query(id,mid+1,r,L,R));
return now;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
bdtree(1,1,n);
for(int i=1;i<=m;i++){
int op,x,y,k;
cin>>op>>x>>y;
if(op==1){
cin>>k;
update1(1,1,n,x,y,k);
cout<<query(1,1,n,x,y)<<"\n";
}else if(op==2){
cin>>k;
update2(1,1,n,x,y,k);
cout<<query(1,1,n,x,y)<<"\n";
}else{
cout<<query(1,1,n,x,y)<<"\n";
}
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...