标签:mes 冒泡排序 ++ isp 个数 bzoj scan ace 因此
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define mod 998244353 4 #define N 1200005 5 int t,n,k,x,y,ans,vis[N],fac[N],inv[N]; 6 int c(int n,int m){ 7 if (m<0)return 0; 8 return 1LL*fac[n]*inv[m]%mod*inv[n-m]%mod; 9 } 10 int f(int n,int m){ 11 return (c(n+m,m)-c(n+m,m-1)+mod)%mod; 12 } 13 int main(){ 14 fac[0]=inv[0]=inv[1]=1; 15 for(int i=1;i<N-4;i++)fac[i]=1LL*fac[i-1]*i%mod; 16 for(int i=2;i<N-4;i++)inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod; 17 for(int i=2;i<N-4;i++)inv[i]=1LL*inv[i-1]*inv[i]%mod; 18 scanf("%d",&t); 19 while (t--){ 20 scanf("%d",&n); 21 x=ans=0; 22 y=1; 23 for(int i=1;i<=n+1;i++)vis[i]=0; 24 for(int i=1;i<=n;i++){ 25 scanf("%d",&k); 26 if ((k<y)&&(y<=x))ans=(ans+f(n-i,n-x))%mod; 27 x=max(x,k); 28 if (x<n)ans=(ans+f(n-i+1,n-x-1))%mod; 29 if ((k!=x)&&(k!=y)){ 30 for(i++;i<=n;i++)scanf("%*d"); 31 break; 32 } 33 vis[k]=1; 34 while (vis[y])y++; 35 } 36 printf("%d\n",ans); 37 } 38 }
标签:mes 冒泡排序 ++ isp 个数 bzoj scan ace 因此
原文地址:https://www.cnblogs.com/PYWBKTDA/p/11506375.html