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