QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#20954#1831. Bruteforceconqueror_of_zky#Compile Error//C++143.7kb2022-02-21 21:15:382022-05-18 04:10:35

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-05-18 04:10:35]
  • 评测
  • [2022-02-21 21:15:38]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
int n,k,w,a[100005],b[200005],rk[200005],id[200005],POS[100005],X[100005],N,C[8][8];
struct query
{
	int op,p,x;
}ava[500005];
int avava;
inline int ksm(int x,int y,int mod)
{
	int rtn=1;
	while(y)
	{
		if(y&1) rtn=rtn*x%mod;
		x=x*x%mod,y>>=1;
	}
	return rtn;
}
struct stree
{
	int l,r,add;
	int smod[5][6],sum[6];
}t[600005];
inline void build(int now,int l,int r)
{
	t[now].l=l,t[now].r=r;
	for(int i=0;i<5;i++)
		for(int j=0;j<=5;j++)
			t[now].smod[i][j]=t[now].sum[j]=0;
	if(l==r) return ;
	int mid=(l+r)/2;
	build(now*2,l,mid),build(now*2+1,mid+1,r);
}
inline giveadd(int now,int x)
{
	t[now].add+=x;
	for(int i=5;i>=1;i--)
	{
		for(int j=i-1;j>=0;j--)
			t[now].sum[i]+=t[now].sum[j]*ksm(x,i-j,mod)%mod*C[i][j];
		t[now].sum[i]%=mod;
	}
	int qwq[5][6];
	for(int i=0;i<5;i++)
		for(int j=0;j<=5;j++)
			qwq[i][j]=t[now].smod[(i+x%w+w)%w][j];
	for(int i=0;i<5;i++)
		for(int j=0;j<=5;j++)
			t[now].smod[i][j]=qwq[i][j];
}
inline void pd(int now)
{
	if(t[now].add)
	{
		giveadd(now*2,t[now].add);
		giveadd(now*2+1,t[now].add);
		t[now].add=0;
	}
}
inline void upd(int now)
{
	for(int i=0;i<5;i++)
		for(int j=0;j<=5;j++)
			t[now].smod[i][j]=t[now*2].smod[i][j]+t[now*2+1].smod[i][j];
	for(int j=0;j<=5;j++)
		t[now].sum[j]=(t[now*2].sum[j]+t[now*2+1].sum[j])%mod;
}
inline void changerk(int now,int l,int r,int x)
{
	if(t[now].l==l&&t[now].r==r)
	{
		giveadd(now,x);
		return ;
	}
	pd(now);
	if(t[now*2].r>=r) changerk(now*2,l,r,x);
	else if(t[now*2+1].l<=l) changerk(now*2+1,l,r,x);
	else changerk(now*2,l,t[now*2].r,x),changerk(now*2+1,t[now*2+1].l,r,x);
	upd(now);
}
/*inline void changerk(int l,int r,int x)
{
	for(int i=l;i<=r;i++) rk[i]+=x;
}*/
inline void changeb(int now,int p,int x)
{
	if(t[now].l==t[now].r)
	{
		t[now].sum[0]=x;
		for(int i=1;i<=5;i++)
			t[now].sum[i]=t[now].sum[i-1]*t[now].add%mod;
//		cout << t[now].add << "\n";
//		cout << t[now].l << " " << x << " " << t[now].sum[2] << '\n';
		for(int k=0;k<5;k++)
		{
			t[now].smod[k][0]=x%w;
			for(int i=1;i<=5;i++)
				t[now].smod[k][i]=t[now].smod[k][i-1]*(t[now].add+k)%w;
		}
		return ;
	}
	pd(now);
	if(t[now*2].r>=p) changeb(now*2,p,x);
	else changeb(now*2+1,p,x);
	upd(now);
}
/*
inline void changeb(int p,int x)
{
	b[p]=x;
}*/
inline int qsum()
{
	return t[1].sum[k];
}
/*inline int qsum()
{
	int rtn=0;
	for(int i=1;i<=N;i++)
		rtn=(rtn+b[i]*ksm(rk[i],k,mod))%mod;
	return rtn;
}*/
inline int qmod()
{
	return t[1].smod[0][k];
}
/*
inline int qmod()
{
	int rtn=0;
	for(int i=1;i<=N;i++)
		rtn=(rtn+b[i]*ksm(rk[i],k,w)%w)%mod;
	return rtn;
}*/
inline int inv(int x)
{
	return ksm(x,mod-2,mod);
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> k >> w;
	id[0]=1;
	for(int i=0;i<=5;i++)
	{
		C[i][0]=C[i][i]=1;
		for(int j=1;j<i;j++)
			C[i][j]=C[i-1][j]+C[i-1][j-1];
	}
	for(int i=1;i<=n;i++)
	{
		cin >> a[i];
		++id[a[i]+1];
	}
	int q;
	cin >> q;
	for(int i=1;i<=q;i++)
	{
		cin >> POS[i] >> X[i];
		++id[X[i]+1];
	}
	for(int i=1;i<=100001;i++)
		id[i]+=id[i-1];
	N=id[100001];
	build(1,1,N);
	for(int i=1;i<=n;i++)
		ava[++avava]={1,++id[a[i]],a[i]};
	for(int i=1;i<=q;i++)
	{
		ava[++avava]={2,id[a[POS[i]]]--,a[POS[i]]};
		ava[++avava]={1,++id[X[i]],X[i]};
		a[POS[i]]=X[i];
		ava[++avava]={3,0,0};
	}
	for(int i=1;i<=avava;i++)
	{
		if(ava[i].op==1)
		{
			changerk(1,ava[i].p,N,1);
			changeb(1,ava[i].p,ava[i].x);
		}
		else if(ava[i].op==2)
		{
			changerk(1,ava[i].p,N,-1);
			changeb(1,ava[i].p,0);
		}
		else cout << ((qsum()-qmod())%mod*inv(w)%mod+mod)%mod << "\n";
//		cout << (qmod()%mod+mod)%mod << "\n";
	}
	return 0;
}

详细

answer.code:36:8: error: ISO C++ forbids declaration of ‘giveadd’ with no type [-fpermissive]
   36 | inline giveadd(int now,int x)
      |        ^~~~~~~
answer.code: In function ‘int giveadd(long long int, long long int)’:
answer.code:52:1: warning: no return statement in function returning non-void [-Wreturn-type]
   52 | }
      | ^