求助,样例都过不了
查看原帖
求助,样例都过不了
1109550
Fish_Water楼主2024/5/30 16:01
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int m,n,bb,cc,dd,tot,cnt;
char aa;
int root[N],a[N]; 
struct tree{
	int sum,ls,rs,lz;
}t[N<<5];

void pushup(int u){
	t[u].sum=t[t[u].ls].sum+t[t[u].rs].sum;
}

int build(int l,int r){
	int u=++tot;
	cout<<l<<' '<<r<<' '<<u<<' ';
	if(l==r){
		cout<<u<<' '<<l<<' '<<a[l]<<endl;
		t[u].sum=a[l];
		return u;
	}
	cout<<endl;
	int mid=(l+r)/2;
	t[u].ls=build(l,mid);
	t[u].rs=build(mid+1,r);
	pushup(u);
	return u;
}

int add(int ed,int l,int r,int L,int R,int k){
	int u=++tot;
	t[u]=t[ed];
	cout<<l<<' '<<r<<' '<<L<<' '<<R<<' '<<u<<' ';
	t[u].sum+=(R-L+1)*k;
	if(l>=L&&r<=R){
		t[u].lz+=k;
		cout<<t[u].lz<<endl;
		return u;
	}
	cout<<endl;
	int mid=(l+r)/2;
	if(R<=mid) t[u].ls=add(t[ed].ls,l,mid,L,R,k);
	else if(L>mid) t[u].rs=add(t[ed].rs,mid+1,r,L,R,k);
	else{
		add(t[ed].ls,l,mid,L,mid,k);
		add(t[ed].rs,mid+1,r,mid+1,R,k);
	}
	return u;
}

int query(int u,int l,int r,int L,int R,int z){
	cout<<l<<' '<<r<<' '<<L<<' '<<R<<' '<<z<<' '<<u<<' ';
	if(l>=L&&r<=R){
		cout<<t[u].sum+(r-l+1)*z<<endl;
		return t[u].sum+(r-l+1)*z;
	}
	cout<<endl;
	int mid=(l+r)/2;
	if(R<=mid) return query(t[u].ls,l,mid,L,R,z+t[u].lz);
	else if(L>mid) return query(t[u].rs,mid+1,r,L,R,z+t[u].lz);
	else{
		return query(t[u].ls,l,mid,L,mid,z+t[u].lz)+query(t[u].rs,mid+1,r,mid+1,R,z+t[u].lz);
	}
}

int main(){
	scanf("%lld%lld",&m,&n);
	for(int i=1;i<=m;i++) scanf("%lld",&a[i]);
	root[0]=build(1,m);
	for(int i=1;i<=n;i++){
		cin>>aa>>bb;
		if(aa=='C'){
			cin>>cc>>dd;
			root[++cnt]=add(root[cnt-1],1,m,bb,cc,dd);
		}
		else if(aa=='Q'){
			cin>>cc;
			printf("%lld\n",query(root[cnt],1,m,bb,cc,0));
		}
	//	else if(aa=='')
	}
	return 0;
}

//10 5
//1 2 3 4 5 6 7 8 9 10
//Q 4 4
//Q 1 10
//Q 2 4
//C 3 6 3
//Q 2 4
2024/5/30 16:01
加载中...