2742021-06-22 15:24:03mraronNemzetközi Rántott Hús Fesztiválcpp14Accepted 100/100156ms77832 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;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted2ms1756 KiB
2Accepted2ms2088 KiB
subtask27/7
3Accepted1ms1852 KiB
4Accepted1ms1852 KiB
subtask39/9
5Accepted2ms2128 KiB
6Accepted2ms2160 KiB
7Accepted2ms2148 KiB
subtask414/14
8Accepted136ms52056 KiB
9Accepted140ms53040 KiB
10Accepted138ms54036 KiB
11Accepted146ms55020 KiB
12Accepted119ms56048 KiB
13Accepted129ms56996 KiB
14Accepted126ms57972 KiB
15Accepted129ms58952 KiB
subtask511/11
16Accepted1ms9772 KiB
17Accepted1ms9776 KiB
18Accepted1ms9776 KiB
subtask629/29
19Accepted2ms10056 KiB
20Accepted2ms10064 KiB
21Accepted2ms10080 KiB
22Accepted2ms10084 KiB
subtask730/30
23Accepted140ms65096 KiB
24Accepted143ms66052 KiB
25Accepted138ms65180 KiB
26Accepted152ms68404 KiB
27Accepted144ms70948 KiB
28Accepted145ms72376 KiB
29Accepted148ms73264 KiB
30Accepted156ms66720 KiB
31Accepted151ms69180 KiB
32Accepted150ms74036 KiB
33Accepted151ms75008 KiB
34Accepted150ms75836 KiB
35Accepted153ms75492 KiB
36Accepted125ms60344 KiB
37Accepted125ms61296 KiB
38Accepted136ms60988 KiB
39Accepted129ms61696 KiB
40Accepted156ms77832 KiB