题解 AGC058B 【Adjacent Chmax】
yukimianyan · · 题解
problem
一个长为
solution
显然地,对于一个
code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int P=998244353;
int n,a[5010];
LL f[5010][5010];
int main(){
// #ifdef LOCAL
// freopen("input.in","r",stdin);
// #endif
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
a[0]=a[n+1]=1e9;
f[0][0]=1;
for(int i=1;i<=n;i++){
int l=i,r=i;
while(l>=1&&a[l-1]<=a[i]) l--;
while(r<=n&&a[r+1]<=a[i]) r++;
memcpy(f[i],f[i-1],sizeof f[i]);
LL sum=f[i][l-1];
for(int j=l;j<=r;j++){
f[i][j]=(f[i][j]+sum)%P;
sum=(sum+f[i-1][j])%P;
}
}
printf("%lld\n",f[n][n]);
return 0;
}
一些关于这个题的思考