记录编号 607117 评测结果 AAAAAAAAAA
题目名称 4180.毛二琛 最终得分 100
用户昵称 Gravatarwdsjl 是否通过 通过
代码语言 C++ 运行时间 0.711 s
提交时间 2025-10-05 17:15:56 内存使用 72.75 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 5010;
const int mod = 1e9+7;

int n,mx,id;
int p[N],cmp[N];
int f[N][N],sum[N][N];
int ans;

signed main(){
	freopen("swap.in","r",stdin);
	freopen("swap.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>p[i];
		p[i]++;
	}
	int r=n-1;
	while(r>=1){
		mx=0;
		for(int i=1;i<=r;i++){
			if(mx<p[i]){
				mx=p[i];
				id=i;
			}
		}
		for(int i=id;i<=r-1;i++){
			cmp[i]=1;
		}
		cmp[id-1]=0;
		if(mx>p[r+1])cmp[r]=1;
		r=id-2;
	}
	f[1][1]=sum[1][1]=1;
	for(int i=2;i<=n-1;i++){
		for(int j=1;j<=i;j++){
			if(cmp[i-1]==1){
				f[i][j]=(sum[i-1][i-1]-sum[i-1][j-1]+mod)%mod; 
			}else{
				f[i][j]=sum[i-1][j-1];
			}
		}
		for(int j=1;j<=i;j++){
			sum[i][j]=(sum[i][j-1]+f[i][j])%mod;
		} 
	}
	cout<<sum[n-1][n-1]<<endl;
	return 0;
}