2742021-06-22 15:24:03mraronNemzetközi Rántott Hús Fesztiválcpp14Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva2ms1756 KiB
2Elfogadva2ms2088 KiB
subtask27/7
3Elfogadva1ms1852 KiB
4Elfogadva1ms1852 KiB
subtask39/9
5Elfogadva2ms2128 KiB
6Elfogadva2ms2160 KiB
7Elfogadva2ms2148 KiB
subtask414/14
8Elfogadva136ms52056 KiB
9Elfogadva140ms53040 KiB
10Elfogadva138ms54036 KiB
11Elfogadva146ms55020 KiB
12Elfogadva119ms56048 KiB
13Elfogadva129ms56996 KiB
14Elfogadva126ms57972 KiB
15Elfogadva129ms58952 KiB
subtask511/11
16Elfogadva1ms9772 KiB
17Elfogadva1ms9776 KiB
18Elfogadva1ms9776 KiB
subtask629/29
19Elfogadva2ms10056 KiB
20Elfogadva2ms10064 KiB
21Elfogadva2ms10080 KiB
22Elfogadva2ms10084 KiB
subtask730/30
23Elfogadva140ms65096 KiB
24Elfogadva143ms66052 KiB
25Elfogadva138ms65180 KiB
26Elfogadva152ms68404 KiB
27Elfogadva144ms70948 KiB
28Elfogadva145ms72376 KiB
29Elfogadva148ms73264 KiB
30Elfogadva156ms66720 KiB
31Elfogadva151ms69180 KiB
32Elfogadva150ms74036 KiB
33Elfogadva151ms75008 KiB
34Elfogadva150ms75836 KiB
35Elfogadva153ms75492 KiB
36Elfogadva125ms60344 KiB
37Elfogadva125ms61296 KiB
38Elfogadva136ms60988 KiB
39Elfogadva129ms61696 KiB
40Elfogadva156ms77832 KiB