abc357f求助!
  • 板块灌水区
  • 楼主lfxxx_
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/6/9 13:21
  • 上次更新2024/6/9 16:15:34
查看原帖
abc357f求助!
795344
lfxxx_楼主2024/6/9 13:21
#include<bits/stdc++.h>
#include<atcoder/modint>
#define int long long
using namespace std;
const int N=2e5+5,mod=998244353;
struct node{
	int sum,sum1,sum2;
	int tag1,tag2;
}tr[N<<2];
int ls(int p){return p<<1;}
int rs(int p){return p<<1|1;}
void pushup(int p)
{
	tr[p].sum=(tr[ls(p)].sum+tr[rs(p)].sum)%mod;
	tr[p].sum1=(tr[ls(p)].sum1+tr[rs(p)].sum1)%mod;
	tr[p].sum2=(tr[ls(p)].sum2+tr[rs(p)].sum2)%mod;
}
void addtag(int p,int pl,int pr,int d,int ty)
{
	int len=pr-pl+1;d%=mod;
	if(ty==1)
	{
		tr[p].tag1=(tr[p].tag1+d)%mod;
		tr[p].sum1=(tr[p].sum1+(len*d)%mod)%mod;
		tr[p].sum=(tr[p].sum+(tr[p].sum2*len)%mod*d%mod)%mod;
	}
	else
	{
		tr[p].tag2=(tr[p].tag2+d)%mod;
		tr[p].sum2=(tr[p].sum2+(len*d)%mod)%mod;
		tr[p].sum=(tr[p].sum+(tr[p].sum1*len%mod)*d%mod)%mod;
	}
}
void pushdown(int p,int pl,int pr)
{
	int mid=pl+pr>>1;
	if(tr[p].tag1)
	{
		addtag(ls(p),pl,mid,tr[p].tag1,1);
		addtag(rs(p),mid+1,pr,tr[p].tag1,1);
		tr[p].tag1=0;
	}
	if(tr[p].tag2)
	{
		addtag(ls(p),pl,mid,tr[p].tag2,2);
		addtag(rs(p),mid+1,pr,tr[p].tag2,2);
		tr[p].tag2=0;
	}
}
void update(int p,int pl,int pr,int L,int R,int d,int t)
{
	if(L<=pl&&pr<=R)
	{
		addtag(p,pl,pr,d,t);
		return ;
	}
	if(R<pl||pr<L)
		return ;
	int mid=pl+pr>>1;
	pushdown(p,pl,pr);
	update(ls(p),pl,mid,L,R,d,t);
	update(rs(p),mid+1,pr,L,R,d,t);
	pushup(p);
}
int query(int p,int pl,int pr,int L,int R)
{
	if(L<=pl&&pr<=R)
		return tr[p].sum;
	if(R<pl||pr<L)
		return 0;
	int mid=pl+pr>>1;
	pushdown(p,pl,pr);
	return query(ls(p),pl,mid,L,R)+query(rs(p),mid+1,pr,L,R);
}
signed main()
{
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;++i)
	{
		int x;
		cin>>x;
		update(1,1,n,i,i,x,1);
	}
	for(int i=1;i<=n;++i)
	{
		int x;
		cin>>x;
		update(1,1,n,i,i,x,2);
	}
	while(q--)
	{
		int op,l,r,d;
		cin>>op>>l>>r;
		if(op<=2)
		{
			cin>>d;
			update(1,1,n,l,r,d,op);
		}
		else
			cout<<query(1,1,n,l,r)<<'\n';
	}
} 

样例1没过,样例2过了。

2024/6/9 13:21
加载中...