Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int p=998244353;
- const int N=1e5+7;
- int a[N];
- int f[N][205][2];
- int pre[205][2];
- int suf[205][2];
- inline int add(const int &a,const int &b){
- int t=a+b;
- return t>=p?t-p:t;
- }
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int n;r(n);
- for(int i=1;i<=n;++i){
- r(a[i]);
- }
- if(~a[1]){
- f[1][a[1]][0]=1;
- }
- else {
- for(int i=1;i<=200;++i){
- f[1][i][0]=1;
- }
- }
- for(int i=1;i<=200;++i){
- pre[i][0]=add(pre[i-1][0],f[1][i][0]);
- }
- for(int i=200;i;--i){
- suf[i][0]=add(suf[i+1][0],f[1][i][0]);
- }
- for(int i=2;i<=n;++i){
- for(int j=1;j<=200;++j){
- if(~a[i] && j!=a[i])continue;
- f[i][j][0]=add(f[i][j][0],add(pre[j-1][0],pre[j-1][1]));
- f[i][j][1]=add(f[i][j][1],add(suf[j+1][1],add(f[i-1][j][0],f[i-1][j][1])));
- }
- for(int j=1;j<=200;++j){
- pre[j][0]=add(pre[j-1][0],f[i][j][0]);
- pre[j][1]=add(pre[j-1][1],f[i][j][1]);
- }
- for(int j=200;j;--j){
- suf[j][0]=add(suf[j+1][0],f[i][j][0]);
- suf[j][1]=add(suf[j+1][1],f[i][j][1]);
- }
- }
- printf("%d\n",pre[200][1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement