社区讨论
求调,玄关
P4314CPU 监控参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mli12ngc
- 此快照首次捕获于
- 2026/02/11 20:50 4 周前
- 此快照最后确认于
- 2026/02/13 21:05 3 周前
样例过了,20pts求调
CPP#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
inline long long read(){
long long res=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch)){
res=(res<<1)+(res<<3)+(ch^48);
ch=getchar();
}
return res*f;
}
struct tree{
int l,r,mxago,mx,add,cov=-1e18;
};
tree t[100005<<2];
int a[100005];
int n,q;
int ls(int p){
return p<<1;
}
int rs(int p){
return p<<1|1;
}
void update(int p){
t[p].mx=max(t[ls(p)].mx,t[rs(p)].mx);
t[p].mxago=max(t[p].mx,t[p].mxago);
}
void build(int p,int l,int r){
t[p].l=l;
t[p].r=r;
if(l==r){
t[p].mxago=a[l];
t[p].mx=a[l];
return;
}
int mid=(l+r)>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
update(p);
}
void push_down(int p){
if(t[p].cov!=-1e18){
t[ls(p)].add=t[p].add;
t[rs(p)].add=t[p].add;
t[ls(p)].mx=t[p].add+t[p].cov;
t[rs(p)].mx=t[p].add+t[p].cov;
t[ls(p)].mxago=max(t[ls(p)].mxago,t[ls(p)].mx);
t[rs(p)].mxago=max(t[rs(p)].mxago,t[rs(p)].mx);
t[ls(p)].cov=t[p].cov;
t[rs(p)].cov=t[p].cov;
t[p].add=0;
t[p].cov=-1e18;
}
else{
t[ls(p)].add+=t[p].add;
t[rs(p)].add+=t[p].add;
t[ls(p)].mx+=t[p].add;
t[rs(p)].mx+=t[p].add;
t[ls(p)].mxago=max(t[ls(p)].mxago,t[ls(p)].mx);
t[rs(p)].mxago=max(t[rs(p)].mxago,t[rs(p)].mx);
t[p].add=0;
}
}
void ch_add(int p,int l,int r,int k){
if(t[p].l>r||t[p].r<l) return;
if(t[p].l>=l&&t[p].r<=r){
t[p].mx+=k;
t[p].mxago=max(t[p].mxago,t[p].mx);
t[p].add+=k;
return;
}
push_down(p);
ch_add(ls(p),l,r,k);
ch_add(rs(p),l,r,k);
update(p);
}
void ch_cov(int p,int l,int r,int k){
if(t[p].l>r||t[p].r<l) return;
if(t[p].l>=l&&t[p].r<=r){
t[p].add=0;
t[p].cov=k;
t[p].mx=k;
t[p].mxago=max(t[p].mxago,k);
return;
}
push_down(p);
ch_cov(ls(p),l,r,k);
ch_cov(rs(p),l,r,k);
update(p);
}
int ask_mx(int p,int l,int r){
if(t[p].l>r||t[p].r<l) return -1e18;
if(t[p].l>=l&&t[p].r<=r) return t[p].mx;
push_down(p);
int ans=-1e18;
ans=max(ans,ask_mx(ls(p),l,r));
ans=max(ans,ask_mx(rs(p),l,r));
return ans;
}
int ask_mxago(int p,int l,int r){
if(t[p].l>r||t[p].r<l) return -1e18;
if(t[p].l>=l&&t[p].r<=r) return t[p].mxago;
push_down(p);
int ans=-1e18;
ans=max(ans,ask_mxago(ls(p),l,r));
ans=max(ans,ask_mxago(rs(p),l,r));
return ans;
}
signed main(){
n=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,1,n);
q=read();
for(int i=1;i<=q;i++){
char c;
cin>>c;
if(c=='Q'){
int l=read(),r=read();
cout<<ask_mx(1,l,r)<<'\n';
}
else if(c=='A'){
int l=read(),r=read();
cout<<ask_mxago(1,l,r)<<'\n';
}
else if(c=='P'){
int l=read(),r=read(),k=read();
ch_add(1,l,r,k);
}
else{
int l=read(),r=read(),k=read();
ch_cov(1,l,r,k);
}
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...