蒟蒻求救,60分orz
查看原帖
蒟蒻求救,60分orz
1081542
ZhaoZhongYue1楼主2024/2/27 14:20
#include<bits/stdc++.h>
#define int long long
using namespace std;
const long long mod=1e7+19;
int n;
int q,t;
const int maxn=2e6+10;
struct caozuo{
	int opt;
	long long val,to;
}e[maxn<<2],A[maxn<<2];
int a[500000],b[500000];
int c[50000005],num_c; 
namespace work
{
	const long long N=2e7+10;
	int tag=0;
	bool c[N];
	long long ans=0,sum=0;
	long long aa[50000005];
	long long tong[50000005];
	int tot=0; 
	//unordered_map<long long,long long> umap;
	//map<long long,long long> mp;
	void solve()
	{
		for(int i=1;i<=q*t;i++)
		{
			if(A[i].opt==1)
			{
				if(!c[A[i].to])
				{
					sum=sum-tag%mod+A[i].val%mod;
					sum%=mod;
					c[A[i].to]=1;
					aa[A[i].to]=A[i].val%mod;
					tong[++tot]=A[i].to;
				}
				else
				{
					sum=sum-aa[A[i].to]%mod+A[i].val%mod;
					aa[A[i].to]=A[i].val%mod;
				}
				
			}
			if(A[i].opt==2)
			{
				for(int j=1;j<=tot;j++)
				{
					aa[tong[j]]+=A[i].val%mod;
					aa[tong[j]]%=mod;
				}
				tag=tag+A[i].val%mod;
				tag%=mod;
				sum=sum+A[i].val*n%mod;
				sum%=mod;
			}
			if(A[i].opt==3)
			{
				for(int j=1;j<=tot;j++)
				{
					aa[tong[j]]=aa[tong[j]]*A[i].val%mod;
					aa[tong[j]]%=mod;
				}
				sum=sum*A[i].val%mod;
				sum%=mod;
				tag=tag*A[i].val%mod;
				tag%=mod;
			}
			if(A[i].opt==4)
			{
				for(int j=1;j<=tot;j++)
				{
					aa[tong[j]]=A[i].val%mod;
					c[tong[j]]=0;
				}
				//memset(c,0,sizeof c);
				tot=0;
				sum=A[i].val*n%mod;
				sum%=mod;
				tag=A[i].val%mod;
				tag%=mod;
			}
			if(A[i].opt==5)
			{
				if(c[A[i].to])
				{
					ans=ans+aa[A[i].to]%mod;
					ans%=mod;
				}
				else
				{
					ans=ans+tag%mod;
					ans%=mod;
				}
				//printf("<%lld>\n",A[i].to);
			}
			if(A[i].opt==6)
			{
				ans=ans+sum%mod;
				ans%=mod;
			}
			
		}
		cout<<(ans%mod+mod)%mod;
	}
}
signed main()
{
	scanf("%lld",&n);
	scanf("%lld",&q);
	c[++num_c]=0;
	c[++num_c]=n+1;
	for(int i=1;i<=q;i++)
	{
		int opt;
		scanf("%lld",&opt);
		e[i].opt=opt;
		if(opt==1)
		{
			int num,val;
			scanf("%lld%lld",&num,&val);
			e[i].val=(val%mod+mod)%mod,e[i].to=num;
			c[++num_c]=num;
		}
		if(opt==5)
		{
			int num;
			scanf("%lld",&num);
			e[i].to=num;
			c[++num_c]=num;
		}
		if(opt==2||opt==3||opt==4)
		{
			int val;
			scanf("%lld",&val);
			e[i].val=(val%mod+mod)%mod;
			//c[++num_c]=0;
		}
	}
	sort(c+1,c+1+num_c);
	int tot_c=unique(c+1,c+1+num_c)-(c+1);
	scanf("%lld",&t);
	for(int i=1;i<=t;i++)
	{
		scanf("%lld%lld",&a[i],&b[i]);
	}
	for(int i=1;i<=t;i++)
	{
		for(int j=1;j<=q;j++)
		{
			A[(i-1)*q+j].opt=e[(a[i]+j*b[i])%q+1].opt;
			A[(i-1)*q+j].val=(e[(a[i]+j*b[i])%q+1].val%mod+mod)%mod;
			A[(i-1)*q+j].to=lower_bound(c+1,c+1+tot_c,e[(a[i]+j*b[i])%q+1].to)-c;
			//A[(i-1)*q+j].id=(i-1)*q+j;
			//printf("%lld,%lld\n",A[(i-1)*q+j].id,A[(i-1)*q+j].opt);
		}
	}
	//sort(A+1,A+1+q*t,cmp);
	work::solve();
	return 0;
}
2024/2/27 14:20
加载中...