Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define pb emplace_back
- using namespace std;
- using ll = long long;
- #ifdef KEV
- #define DE(i, e) cerr << #i << ' ' << i << e
- void debug(auto L, auto R) { while (L < R) cerr << *L << " \n"[L+1==R], ++L; }
- #else
- #define DE(...) 0
- void debug(...) {}
- #endif
- const int maxn = 1000010;
- int n, pf[maxn], v[maxn], dpl[maxn], dpr[maxn], sl[maxn], sr[maxn];
- char w[maxn];
- int solve(int *dp) {
- static int cnt;
- ++cnt;
- for (int i = 1;i <= n;++i)
- pf[i] = pf[i-1] + v[i];
- stack<int> st;
- st.push(0);
- int res = 0;
- #define DP(i) (cnt==1?dp[i] : dp[n-i+1])
- for (int i = 1;i <= n;++i) {
- while (st.size() &&
- pf[st.top()] > pf[i])
- st.pop();
- DP(i) = st.empty() ? 0 : DP(st.top()) + i - st.top();
- st.push(i);
- }
- return res;
- }
- signed main(){
- ios_base::sync_with_stdio(0), cin.tie(0);
- cin >> n >> w+1;
- for (int i = 1;i <= n;++i)
- v[i] = w[i] != 'j' ? 1 : -1;
- solve(dpl);
- reverse(v+1, v+1+n);
- solve(dpr);
- for (int i = 1;i <= n;++i)
- sr[i] = max(sr[i-1], dpl[i] + i - 1);
- sl[n+1] = n+1;
- for (int i = n;i >= 1;--i)
- sl[i] = min(sl[i+1], i - dpr[i] + 1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement