不是,这哪错了
查看原帖
不是,这哪错了
1025329
_psycho楼主2023/7/19 16:31
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int t[2000005];
int a[1000005];
long long jc[1000005];
const int mod=998244353;
int lowbit(int q){
	return q&-q;
}
int one_point(int x,int k){
	for(int i=x;i<=n;i+=lowbit(i)){
		t[i]+=k;
	}
}
int ask_front(int la){
	long long sum=0;
	for(int i=la;i;i-=lowbit(i)){
		sum+=t[i];
	}
	return sum;
}
main(){
	int n;
	cin>>n;
	jc[0]=jc[1]=1;
	for(int i=1;i<=n;i++){
		jc[i]=(jc[i-1]*i)%mod;
		one_point(i,1);
	}
	long long ans=1;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		ans+=((ask_front(a[i])-1)%mod+jc[n-i]%mod)%mod;
		one_point(a[i],-1);
	}
	cout<<ans<<"\n";
	return 0;
}
2023/7/19 16:31
加载中...