题目
其它样例:
Input:
3
3 1 2Output:
665496237
Input:
8
1 5 2 6 3 7 4 8Output:
904361851
思路
代码
#include <cstdio>
#define MAXN 5005
#define Ha 998244353
typedef long long ll;
ll n,a[MAXN];
ll inv[MAXN];
ll f;
ll u[MAXN],v[MAXN],r[MAXN],s[MAXN];
int main()
{
scanf("%lld",&n);
for (int i=1; i<=n; i++)
scanf("%lld",&a[i]);
//逆元
inv[1]=1;
for (ll i=2; i<=n; i++)
inv[i]=inv[Ha%i]*(Ha-Ha/i)%Ha;
for (int i=n; i>=0; i--) {
for (int j=n; j>=0; j--) {
if (i==j && i && j)
continue;
if (a[i]>a[j]) {
f= u[i] ? (1+inv[u[i]]*r[i])%Ha : 1;
v[j]++;
s[j]=(s[j]+f)%Ha;
}
else {
f= v[j] ? (1+inv[v[j]]*s[j])%Ha : 1;
u[i]++;
r[i]=(r[i]+f)%Ha;
}
}
}
printf("%lld\n",(f-1+Ha)%Ha);
return 0;
}