Alex_tz307

CntSubsirMax

Dec 13th, 2020
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3.  
  4. using namespace std;
  5.  
  6. int32_t main() {
  7.     ios_base::sync_with_stdio(false);
  8.     cin.tie(nullptr);
  9.     cout.tie(nullptr);
  10.     string s;
  11.     cin >> s;
  12.     int N = s.size();
  13.     s = '0' + s;
  14.     vector<int> st(N + 1, 0);
  15.     stack<int> S;
  16.     for(int i = N; i > 0; --i) {
  17.         while(!S.empty() && s[S.top()] <= s[i]) {
  18.             st[S.top()] = i;
  19.             S.pop();
  20.         }
  21.         S.emplace(i);
  22.     }
  23.     const int mod = 1e9 + 7;
  24.     vector<int> dp(N + 1), sum(N + 1);
  25.     for(int i = 1; i <= N; ++i) {
  26.         sum[i] = (sum[st[i]] + i - st[i]) % mod;
  27.         dp[i] = (dp[st[i]] + sum[i]) % mod;
  28.     }
  29.     int ans = 0;
  30.     for(int i = 1; i <= N; ++i)
  31.         ans = (ans + dp[i]) % mod;
  32.     cout << ans;
  33. }
  34.  
Advertisement
Add Comment
Please, Sign In to add comment