社区讨论
求调,或者给个hack数据
P1253扶苏的问题参与者 4已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lo158dy1
- 此快照首次捕获于
- 2023/10/22 15:24 2 年前
- 此快照最后确认于
- 2023/11/02 14:56 2 年前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 4e6+114;
int n,q,a[N];
struct tree{int l,r,k,ans,tag1,tag2;}rt[N];
void build(int l,int r,int k){
rt[k].tag1=1e9+1;
rt[k].l=l,rt[k].r=r;
if(l==r){rt[k].ans=a[l],rt[k].tag2=0;return;}
int mid = (l + r) >> 1;
build(l,mid,k<<1);build(mid+1,r,k<<1|1);
rt[k].ans=max(rt[k<<1].ans,rt[k<<1|1].ans);
}
void pushdown(int k){
if(rt[k].tag1 != 1e9+1){
rt[k<<1].tag1 = rt[k<<1|1].tag1 = rt[k].tag1;
rt[k<<1].ans = rt[k<<1|1].ans = rt[k].ans;
rt[k].tag1 = 1e9+1;
rt[k].tag2 = 0;
}
if(rt[k].tag2){
rt[k<<1].tag2 += rt[k].tag2;
rt[k<<1|1].tag2 += rt[k].tag2;
rt[k<<1].ans += rt[k].tag2;
rt[k<<1|1].ans += rt[k].tag2;
rt[k].tag2 = 0;
}
}
//8 3
void updata1(int l,int r,int k,int val){
if(l <= rt[k].l && rt[k].r <= r){
rt[k].tag2 = 0;
rt[k].ans = val;
rt[k].tag1 = val;
return;
}
pushdown(k);
if(r >= rt[k<<1|1].l)updata1(l,r,k<<1|1,val);
if(l <= rt[k<<1].r)updata1(l,r,k<<1,val);
rt[k].ans=max(rt[k<<1].ans,rt[k<<1|1].ans);
}
void updata2(int l,int r,int k,int val){
if(l <= rt[k].l && rt[k].r <= r){
rt[k].tag2 += val;
rt[k].ans += val;
return;
}
pushdown(k);
if(r >= rt[k<<1|1].l)updata2(l,r,k<<1|1,val);
if(l <= rt[k<<1].r)updata2(l,r,k<<1,val);
rt[k].ans=max(rt[k<<1].ans,rt[k<<1|1].ans);
}
int query(int l,int r,int k){
if(l <= rt[k].l && rt[k].r <= r)
return rt[k].ans;
int aans = -1e9-1;
pushdown(k);
if(r >= rt[k<<1|1].l)aans = max(aans,query(l,r,k<<1|1));
if(l <= rt[k<<1].r)aans = max(aans,query(l,r,k<<1));
rt[k].ans=max(rt[k<<1].ans,rt[k<<1|1].ans);
return aans;
}
signed main(){
cin >> n >> q;
for(int i = 1;i <= n; i++)
cin >> a[i];
build(1,n,1);
while(q--){
int opt,l,r;
cin >> opt >> l >> r;
if(opt == 1){
int val;
cin >> val;
updata1(l,r,1,val);
}
if(opt == 2){
int val;
cin >> val;
updata2(l,r,1,val);
}
if(opt == 3){
cout << query(l,r,1) << "\n";
}
}
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...