问 RE 原因
  • 板块灌水区
  • 楼主Rigel
  • 当前回复2
  • 已保存回复3
  • 发布时间2024/10/15 20:30
  • 上次更新2024/10/15 21:11:20
查看原帖
问 RE 原因
602458
Rigel楼主2024/10/15 20:30

题目链接

有点莫名其妙。不知道有没有低级错误

#include<bits/stdc++.h>
#define int long long
#define maxn 100010
using namespace std;
int t,n,q,a[maxn],tr[maxn<<2],ts[maxn<<2],tag1[maxn<<2],tag2[maxn<<2];
inline int read(){
	int ret=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')ret=ret*10+(ch&15),ch=getchar();
	return ret*f;
}
void push_down(int now,int l,int r){
	if(l==r){
		tag1[now]=tag2[now]=0;
		return;
	}
	int lson=now<<1,rson=(now<<1)|1,mid=(l+r)>>1;
	if(tag1[now]){
		tr[lson]=(mid-l+1)*tag1[now],tr[rson]=(r-mid)*tag1[now];
		ts[lson]=tr[lson]*tag1[now],ts[rson]=tr[rson]*tag1[now];
		tag1[now]=0;
	}
	ts[lson]+=tr[lson]*tag2[now]*2+(mid-l+1)*tag2[now]*tag2[now];
	ts[rson]+=tr[rson]*tag2[now]*2+(r-mid)*tag2[now]*tag2[now];
	tag2[now]=0;
}
void push_up(int now){
	int lson=now<<1,rson=(now<<1)|1;
	tr[now]=tr[lson]+tr[rson];
	ts[now]=ts[lson]+ts[rson];
}
void Build(int now,int l,int r){
	if(l==r){
		tr[now]=a[l];
		ts[now]=tr[now]*a[l];
		tag1[now]=tag2[now]=0;
		return;
	}
	int lson=now<<1,rson=(now<<1)|1,mid=(l+r)>>1;
	Build(lson,l,mid),Build(rson,mid+1,r);
	push_up(now);
}
void Update1(int x,int y,int k,int now,int l,int r){
	if(x<=l&&r<=y){
		tr[now]=(r-l+1)*k;
		ts[now]=(r-l+1)*k*k;
		tag1[now]=k;
		tag2[now]=0;
		return;
	}
	push_down(now,l,r);
	int lson=now<<1,rson=(now<<1)|1,mid=(l+r)>>1;
	if(x<=mid)Update1(x,y,k,lson,l,mid);
	if(mid+1<=y)Update1(x,y,k,rson,mid+1,r);
	push_up(now);
}
void Update2(int x,int y,int k,int now,int l,int r){
	if(x<=l&&r<=y){
		ts[now]+=tr[now]*k*2+(r-l+1)*k*k;
		tr[now]+=(r-l+1)*k;
		tag2[now]+=k;
		return;
	}
	push_down(now,l,r);
	int lson=now<<1,rson=(now<<1)|1,mid=(l+r)>>1;
	if(x<=mid)Update2(x,y,k,lson,l,mid);
	if(mid+1<=y)Update2(x,y,k,rson,mid+1,r);
	push_up(now);
}
int Query(int x,int y,int now,int l,int r){
	if(x<=l&&r<=y)return ts[now];
	push_down(now,l,r);
	int lson=now<<1,rson=(now<<1)|1,mid=(l+r)>>1,ret=0;
	if(x<=mid)ret+=Query(x,y,lson,l,mid);
	if(mid+1<=r)ret+=Query(x,y,rson,mid+1,r);
	return ret;
}
signed main(){
	t=read();
	for(int c=1;c<=t;c++){
		printf("Case %lld:\n",c);
		n=read(),q=read();
		for(int i=1;i<=n;i++)a[i]=read();
		Build(1,1,n);
		while(q--){
			int op=read();
			if(!op){
				int st=read(),ed=read(),x=read();
				Update1(st,ed,x,1,1,n);
			}
			if(op==1){
				int st=read(),ed=read(),x=read();
				Update2(st,ed,x,1,1,n);
			}
			if(op==2){
				int st=read(),ed=read();
				printf("%lld\n",Query(st,ed,1,1,n));
			}
		}
	}
	return 0;
}
2024/10/15 20:30
加载中...