P2023 [AHOI2009] 维护序列

R e s u l t Result Result

...


H y p e r l i n k Hyperlink Hyperlink

https://www.luogu.com.cn/problem/P2023


D e s c r i p t i o n Description Description

双倍经验,同线段树2


S o l u t i o n Solution Solution

双倍经验,同线段树2
注意输入要改一改


C o d e Code Code
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define N 100010 
using namespace std;int n,mod,l,r,opt,m;
LL a[N],x;
struct xds
{
	#define lson k<<1
	#define rson k<<1|1
	LL sum[N<<2],lzy[N<<2],mul[N<<2];
	inline void build(int k=1,int l=1,int r=n)
	{
		mul[k]=1;
		if(l==r) return (void)(sum[k]=a[l]);
		int mid=l+r>>1;
		build(lson,l,mid);build(rson,mid+1,r);
		return (void)(sum[k]=(sum[lson]+sum[rson])%mod);
	}
	inline void pushdown(int k,int l,int r)
	{
		if(lzy[k]==0&&mul[k]==1) return;
		int mid=l+r>>1;
		sum[lson]=(sum[lson]*mul[k]%mod+(mid-l+1)*lzy[k]%mod)%mod;
		sum[rson]=(sum[rson]*mul[k]%mod+(r-mid)*lzy[k]%mod)%mod;
		mul[lson]=mul[lson]*mul[k]%mod;mul[rson]=mul[rson]*mul[k]%mod;
		lzy[lson]=(lzy[lson]*mul[k]%mod+lzy[k])%mod;
		lzy[rson]=(lzy[rson]*mul[k]%mod+lzy[k])%mod;
		return(void)(mul[k]=1,lzy[k]=0);
	}
	inline void Modify_add(int ql,int qr,LL d,int k=1,int l=1,int r=n)
	{
		if(ql<=l&&r<=qr) return (void)(sum[k]=(sum[k]+(r-l+1)*d%mod)%mod,lzy[k]+=d,lzy[k]%=mod);
		pushdown(k,l,r);int mid=l+r>>1;
		if(ql<=mid) Modify_add(ql,qr,d,lson,l,mid);
		if(qr>mid) Modify_add(ql,qr,d,rson,mid+1,r);
		return (void)(sum[k]=(sum[lson]+sum[rson])%mod);
	}
	inline void Modify_mul(int ql,int qr,LL d,int k=1,int l=1,int r=n)
	{
		if(ql<=l&&r<=qr) return (void)(sum[k]=sum[k]*d%mod,mul[k]=mul[k]*d%mod,lzy[k]=lzy[k]*d%mod);
		pushdown(k,l,r);int mid=l+r>>1;
		if(ql<=mid) Modify_mul(ql,qr,d,lson,l,mid);
		if(qr>mid) Modify_mul(ql,qr,d,rson,mid+1,r);
		return (void)(sum[k]=(sum[lson]+sum[rson])%mod);
	}
	inline LL Query(int ql,int qr,int k=1,int l=1,int r=n)
	{
		if(ql<=l&&r<=qr) return sum[k];
		LL res=0;int mid=l+r>>1;
		pushdown(k,l,r);
		if(ql<=mid) res=(res+Query(ql,qr,lson,l,mid))%mod;
		if(qr>mid) res=(res+Query(ql,qr,rson,mid+1,r))%mod;
		return res;
	}
}T;
inline LL read()
{
	char c;LL d=1,f=0;
	while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;
	while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;
	return d*f;
}
signed main()
{
	n=read();mod=read();
	for(register int i=1;i<=n;i++) a[i]=read();
	T.build();m=read();
	while(m--)
	{
		opt=read();
		if(opt==1)
		{
			l=read();r=read();x=read()%mod;
			T.Modify_mul(l,r,x);
		}
		if(opt==2)
		{
			l=read();r=read();x=read()%mod;
			T.Modify_add(l,r,x);
		}
		if(opt==3)
		{
			l=read();r=read();
			printf("%lld\n",T.Query(l,r));
		} 
	}
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值