社区讨论
G
题目总版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mkida071
- 此快照首次捕获于
- 2026/01/17 21:52 上个月
- 此快照最后确认于
- 2026/01/20 23:55 4 周前
脑子不太清醒,自己都不知道自己在写啥,如果哪里糖了别骂就当我在说梦话 /ll
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q;
struct tree{
int l,r,sum,tag,maxn;
bool flag,tag2;
}t[800005];
void pushdown(int id){
if(t[id].tag==-1){
t[id<<1].tag=-1;
t[id<<1].sum=0;
t[id<<1|1].tag=-1;
t[id<<1|1].sum=0;
t[id].tag=0;
}
if(t[id].tag){
t[id<<1].sum=t[id].tag*(t[id<<1].r-t[id<<1].l+1);
t[id<<1].tag=t[id].tag;
t[id<<1|1].sum=t[id].tag*(t[id<<1|1].r-t[id<<1|1].l+1);
t[id<<1|1].tag=t[id].tag;
t[id].tag=0;
}
if(t[id].tag2){
t[id<<1].flag=!t[id<<1].flag;
t[id<<1].tag2=t[id].tag;
t[id<<1|1].flag=!t[id<<1|1].flag;
t[id<<1|1].tag2=t[id].tag;
t[id].tag=0;
}
}
void build(int id,int l,int r){
t[id].l=l;
t[id].r=r;
t[id].sum=0;
t[id].flag=1;
t[id].tag=0;
t[id].tag2=0;
t[id].maxn=0;
if(l==r)return;
int mid=l+r>>1;
build(id<<1,l,mid);
build(id<<1|1,mid+1,r);
}
void update1(int id,int L,int R,int k){
if(L<=t[id].l&&t[id].r<=R){
t[id].tag+=k*(t[id].r-t[id].l+1);
return;
}
pushdown(id);
int mid=t[id].l+t[id].r>>1;
if(L<=mid)update1(id<<1,L,R,k);
if(mid+1<=R)update1(id<<1|1,L,R,k);
t[id].sum=t[id<<1].sum+t[id<<1|1].sum;
t[id].maxn=max(t[id<<1].maxn,t[id<<1|1].maxn);
}
void update2(int id,int l,int r){
if(l<=t[id].l&&t[id].r<=r){
t[id].tag=-1;
t[id].tag2=!t[id].tag2;
return;
}
pushdown(id);
int mid=t[id].l+t[id].r>>1;
if(l<=mid)update2(id<<1,l,r);
if(mid+1<=r)update2(id<<1|1,l,r);
t[id].sum=t[id<<1].sum+t[id<<1|1].sum;
t[id].maxn=max(t[id<<1].maxn,t[id<<1|1].maxn);
}
int query(int id,int l,int r){
if(l<=t[id].l&&t[id].r<=r)return t[id].maxn;
int mid=t[id].l+t[id].r>>1,ans=0;
if(l<=mid)ans=max(ans,query(id<<1,l,r));
if(mid+1<=r)ans=max(ans,query(id<<1|1,l,r));
return ans;
}
signed main(){
cin>>n>>q;
build(1,1,n);
while(q--){
int t,l,r;
cin>>t>>l>>r;
if(t==1){
int x;
cin>>x;
update1(1,l,r,x);
}
else if(t==2){
update2(1,l,r);
}
else cout<<query(1,l,r)<<'\n';
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...