蒟蒻C++WA50求助
查看原帖
蒟蒻C++WA50求助
722468
MrJC_Pandingding楼主2023/6/23 16:03
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int i,m,n,w,x,y;
bool c[maxn+2<<2|2];
long long a[maxn+10],ad[maxn+2<<2|2],cg[maxn+2<<2|2],sumn[maxn+2<<2|2],z;
void bld(int q,int lt,int rt)
{
	int md=lt+rt>>1;
	if(lt==rt)
	{
		sumn[q]=a[lt];
		return;
	}
	bld(q<<1,lt,md);
	bld(q<<1|1,md+1,rt);
	sumn[q]=max(sumn[q<<1],sumn[q<<1|1]);
	return;
}
void add(int q,int lt,int rt,int v)
{
	ad[q]+=v;
	sumn[q]+=v;
	return; 
}
void ch(int q,int lt,int rt,int v)
{
	c[q]=true;
	cg[q]=sumn[q]=v;
	ad[q]=0;
	return;
}
void pushdn(int q,int lt,int rt,int md)
{
	if(!ad[q])
		return;
	add(q<<1,lt,md,ad[q]);
	add(q<<1|1,md+1,rt,ad[q]);
	ad[q]=0;
	return;
}
void pushchg(int q,int lt,int rt,int md)
{
	if(!c[q])
		return;
	ch(q<<1,lt,md,cg[q]);
	ch(q<<1|1,md+1,rt,cg[q]);
	c[q]=false;
	return;
}
long long qry(int q,int lt,int rt,int x,int y)
{
	int md=lt+rt>>1;
	long long ans=LLONG_MIN;
	if(lt>=x&&rt<=y)
		return sumn[q];
	pushchg(q,lt,rt,md);
	pushdn(q,lt,rt,md);
	if(x<=md)
		ans=max(ans,qry(q<<1,lt,md,x,y));
	if(md<=y-1)
		ans=max(ans,qry(q<<1|1,md+1,rt,x,y));
	return ans;
}
void mdf(int q,int lt,int rt,int x,int y,long long v)
{
	int md=lt+rt>>1;
	if(lt>=x&&rt<=y)
	{
		add(q,lt,rt,v);
		return;
	}
	pushdn(q,lt,rt,md);
	if(x<=md)
		mdf(q<<1,lt,md,x,y,v);
	if(md<=y-1)
		mdf(q<<1|1,md+1,rt,x,y,v);
	sumn[q]=max(sumn[q<<1],sumn[q<<1|1]);
	return;
}
void chg(int q,int lt,int rt,int x,int y,long long v)
{
	int md=lt+rt>>1;
	if(lt>=x&&rt<=y)
	{
		ch(q,lt,rt,v);
		return;
	}
	pushchg(q,lt,rt,md);
	pushdn(q,lt,rt,md);
	if(x<=md)
		chg(q<<1,lt,md,x,y,v);
	if(md<=y-1)
		chg(q<<1|1,md+1,rt,x,y,v);
	sumn[q]=max(sumn[q<<1],sumn[q<<1|1]);
	return;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
		scanf("%lld",&a[i]);
	bld(1,1,n);
	while(m--)
	{
		scanf("%d%d%d",&w,&x,&y);
		if(w==1)
		{
			scanf("%lld",&z);
			chg(1,1,n,x,y,z);
		}
		else if(w==2)
		{
			scanf("%lld",&z);
			mdf(1,1,n,x,y,z);
		}
		else printf("%lld\n",qry(1,1,n,x,y));
	}
	return 0;
}

记录,悬赏关注。

2023/6/23 16:03
加载中...