10分求大佬帮助
查看原帖
10分求大佬帮助
169594
Heart_Of_Iron_4楼主2021/8/7 11:46
#include<bits/stdc++.h>
using namespace std;
unsigned long long ans=0,mod=998244353;
int a[1000100]={},n,t1,fac[1000100]={1};
inline int lowbit(register int k)
{
	return k&(-k);
}
inline void add(register int r,register int k)
{
	while(r<=n)
	{
		a[r]+=k;
		r+=lowbit(r);
	}
}
inline long long sum(register int k)
{
	register long long sm=0;
	while(k>0)
	{
		sm+=a[k];
		k-=lowbit(k);
	}
	return sm;
}
int main()
{
	scanf("%d",&n);
	for(register int i=1;i<=n;++i)
		add(i,1),fac[i]=(fac[i-1]*i)%mod;
	ans=1;
	for(register int i=1;i<=n;++i)
	{
		scanf("%d",&t1);
		ans=(ans+((sum(t1)-1)*fac[n-i]))%mod;
		add(t1,-1); 
	}
	printf("%lld",ans%mod);
	return 0;
}
2021/8/7 11:46
加载中...