社区讨论

求调,玄关

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 条回复,欢迎继续交流。

正在加载回复...