274 | 2021-06-22 15:24:03 | mraron | Nemzetközi Rántott Hús Fesztivál | cpp14 | Elfogadva 100/100 | 156ms | 77832 KiB |
#include<bits/stdc++.h>
using namespace std;
#define LOG(x) cerr<<(#x)<<" = "<<x<<"\n";
int n;
string s;
vector<int> t;
vector<int> pre;
vector<int> cntK, cntH;
int main() {
ios_base::sync_with_stdio(false);cin.tie(0);
cin>>n>>s;
vector<int> ans(n);
t.resize(n);
pre.resize(n);
cntK.resize(n);
cntH.resize(n);
for(int i=0;i<n;++i) {
t[i]=(s[i]=='H'?-1:1);
cntK[i]=s[i]!='H';
cntH[i]=s[i]=='H';
}
pre[0]=t[0];
for(int i=1;i<n;++i) {
pre[i]+=pre[i-1]+t[i];
cntK[i]+=cntK[i-1];
cntH[i]+=cntH[i-1];
}
//nem extendálható intervallumok
stack<int, vector<int>> st;
for(int i=n-1;i>=0;i--) {
while(!st.empty() && pre[st.top()]>=(i?pre[i-1]:0)) st.pop();
int until=(st.empty()?n:st.top());
if(s[i]!='H') {
int res=min(cntH[until-1]-(i?cntH[i-1]:0), cntK[until-1]-(i?cntK[i-1]:0));
ans[i]=max(ans[i], res);
}
st.push(i);
}
//szuffixek
int add=0, cnt=0, K=0, M=0, H=0;
vector<int> suf_mn(n,1e9);
vector<int> lst, dp; lst.reserve(n); dp.reserve(n);
for(int i=n-1;i>=0;i--) {
add+=t[i];
if(i==n-1) suf_mn[i]=-add+t[i];
else {
suf_mn[i]=min({suf_mn[i+1], -add+t[i]});
}
if(s[i]=='M') {
lst.push_back(suf_mn[i]);
if(!dp.empty()) dp.push_back(min(dp.back()-2, suf_mn[i]));
else dp.push_back(suf_mn[i]);
M++;
}
if(s[i]=='K') K++;
if(s[i]=='H') H++;
while(cnt<(int)dp.size() && dp[cnt]+add>=2) cnt++;
while(cnt>0 && dp[cnt-1]+add<2) cnt--;
if(suf_mn[i]+add>=0) {
int res=min(H+cnt, K+M-cnt);
ans[i]=max(ans[i], res);
}
}
for(auto i:ans) cout<<i<<" ";
cout<<"\n";
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Elfogadva | 2ms | 1756 KiB | ||||
2 | Elfogadva | 2ms | 2088 KiB | ||||
subtask2 | 7/7 | ||||||
3 | Elfogadva | 1ms | 1852 KiB | ||||
4 | Elfogadva | 1ms | 1852 KiB | ||||
subtask3 | 9/9 | ||||||
5 | Elfogadva | 2ms | 2128 KiB | ||||
6 | Elfogadva | 2ms | 2160 KiB | ||||
7 | Elfogadva | 2ms | 2148 KiB | ||||
subtask4 | 14/14 | ||||||
8 | Elfogadva | 136ms | 52056 KiB | ||||
9 | Elfogadva | 140ms | 53040 KiB | ||||
10 | Elfogadva | 138ms | 54036 KiB | ||||
11 | Elfogadva | 146ms | 55020 KiB | ||||
12 | Elfogadva | 119ms | 56048 KiB | ||||
13 | Elfogadva | 129ms | 56996 KiB | ||||
14 | Elfogadva | 126ms | 57972 KiB | ||||
15 | Elfogadva | 129ms | 58952 KiB | ||||
subtask5 | 11/11 | ||||||
16 | Elfogadva | 1ms | 9772 KiB | ||||
17 | Elfogadva | 1ms | 9776 KiB | ||||
18 | Elfogadva | 1ms | 9776 KiB | ||||
subtask6 | 29/29 | ||||||
19 | Elfogadva | 2ms | 10056 KiB | ||||
20 | Elfogadva | 2ms | 10064 KiB | ||||
21 | Elfogadva | 2ms | 10080 KiB | ||||
22 | Elfogadva | 2ms | 10084 KiB | ||||
subtask7 | 30/30 | ||||||
23 | Elfogadva | 140ms | 65096 KiB | ||||
24 | Elfogadva | 143ms | 66052 KiB | ||||
25 | Elfogadva | 138ms | 65180 KiB | ||||
26 | Elfogadva | 152ms | 68404 KiB | ||||
27 | Elfogadva | 144ms | 70948 KiB | ||||
28 | Elfogadva | 145ms | 72376 KiB | ||||
29 | Elfogadva | 148ms | 73264 KiB | ||||
30 | Elfogadva | 156ms | 66720 KiB | ||||
31 | Elfogadva | 151ms | 69180 KiB | ||||
32 | Elfogadva | 150ms | 74036 KiB | ||||
33 | Elfogadva | 151ms | 75008 KiB | ||||
34 | Elfogadva | 150ms | 75836 KiB | ||||
35 | Elfogadva | 153ms | 75492 KiB | ||||
36 | Elfogadva | 125ms | 60344 KiB | ||||
37 | Elfogadva | 125ms | 61296 KiB | ||||
38 | Elfogadva | 136ms | 60988 KiB | ||||
39 | Elfogadva | 129ms | 61696 KiB | ||||
40 | Elfogadva | 156ms | 77832 KiB |