我写的时间复杂度O(n)的代码T了一个
#include<bits/stdc++.h>
#define ll long long
#define md 998244353
using namespace std;
int T,n,m,a[10000005];
ll fac[10000005],inv[10000005];
ll ksm(ll x,int y){
ll ans=1;
for(;y;y/=2,x=x*x%md)if(y&1)ans=ans*x%md;
return ans;
}
void init(){
fac[0]=inv[0]=1;
for(int i=1;i<=10000000;i++)fac[i]=fac[i-1]*i%md;
inv[10000000]=ksm(fac[10000000],md-2);
for(int i=9999999;i;i--)inv[i]=inv[i+1]*(i+1)%md;
}
ll C(int x,int y){
return fac[x]*inv[y]%md*inv[x-y]%md;
}
signed main(){
init();
cin>>T;
ll lst=0,sum=0,ans=0;
while(T--){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
a[n+1]=0;
lst=0,sum=0,ans=0;
for(int i=1;i<=n+1;lst=a[i],i++)if(a[i]<=lst)sum++;
if(sum>m){cout<<0<<'\n';continue;}
for(int i=sum;i<=m;i++)(ans+=C(n-sum,i-sum))%=md;
cout<<ans<<'\n';
}
}
/*
*/