fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const long long mod=998244353;
  4. long long dp[501][501];
  5. long long compute[501];
  6. int main()
  7. {
  8. int n;
  9. int i,j;
  10. compute[0]=1;
  11. for(i=1;i<=500;i++)
  12. {
  13. compute[i]=(compute[i-1]*2LL)%mod;
  14. }
  15. cin>>n;
  16. char ch;
  17. long long x[n+1],vis[n+1];
  18. memset(vis,0,sizeof(vis));
  19. int cnt=0;
  20. for(i=1;i<=n;i++)
  21. {
  22. cin>>ch;
  23. if(ch=='+')
  24. {
  25. cin>>x[i];
  26. cnt++;
  27. vis[i]=1;
  28. for(j=0;j<=cnt;j++)
  29. {
  30. int pp=0;
  31. for(int k=i-1;k>=1;k--)
  32. {
  33. if(vis[k]&&x[k]<=x[i])
  34. {
  35. pp++;
  36. }
  37. }
  38. if(pp>=j&&j<cnt)
  39. {
  40. dp[i][j]=((dp[i-1][j]%mod*2LL%mod)%mod+(x[i]%mod*compute[i-1-j]%mod)%mod)%mod;
  41. }
  42. else if(pp>=j&&j==cnt)
  43. {
  44. dp[i][j]=((dp[i-1][j]%mod*1LL%mod)%mod+(x[i]%mod*compute[i-1-j]%mod)%mod)%mod;
  45. }
  46. else if(j<cnt)
  47. {
  48. dp[i][j]=(dp[i-1][j]%mod+dp[i-1][j-1]%mod)%mod;
  49. }
  50. else if(j==cnt)
  51. {
  52. dp[i][j]=(dp[i-1][j-1]%mod)%mod;
  53. }
  54. }
  55. }
  56. else
  57. {
  58. for(j=0;j<=cnt;j++)
  59. {
  60. dp[i][j]=dp[i-1][j];
  61. }
  62. for(j=0;j<cnt;j++)
  63. {
  64. dp[i][j]=(dp[i][j]%mod+dp[i-1][j+1]%mod)%mod;
  65. }
  66. }
  67. }
  68. cout<<dp[n][0]<<endl;
  69. }
Success #stdin #stdout 0s 5496KB
stdin
4
+ 208445053
-
-
+ 208445053
stdout
87961824