100482024-03-25 20:07:06111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 56/100612ms181860 KiB
#include <bits/stdc++.h>
using namespace std;

// #define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	string S;
	cin>>S;
	vector<int>c(N+1),vk(N+1),vh(N+1),w(N+1),f(1);
	for(int i=0;i<N;i++){
		if(S[i]=='M'){
			f.push_back(i);
		}
		c[i+1]=c[i]+(S[i]!='K');
		vk[i+1]=(S[i]!='H'?vk[i]+1:vk[i]-1);
		vh[i+1]=(S[i]!='K'?vh[i]-1:vh[i]+1);
		w[i+1]=w[i]+(S[i]=='M');
	}
	f.push_back(N);
	vector<array<int,20>>tk(N+1),th(N+1);
	for(int i=0;i<N+1;i++){
		tk[i][0]=vk[i];
		th[i][0]=vh[i];
	}
	for(int j=1;j<20;j++){
		for(int l=0,r=1<<j-1;r<N+1;l++,r++){
			tk[l][j]=min(tk[l][j-1],tk[r][j-1]);
			th[l][j]=min(th[l][j-1],th[r][j-1]);
		}
	}
	auto qk=[&](int l,int r)->int{
		int i=__lg(r-l);
		return min(tk[l][i],tk[r-(1<<i)][i]);
	};
	auto qh=[&](int l,int r)->int{
		int i=__lg(r-l);
		return min(th[l][i],th[r-(1<<i)][i]);
	};
	for(int i=0;i<N;i++){
		int b=qk(i+1,N+1)-vk[i]>=0;
		if(b){
			int l=1,h=w[N]-w[i]+1;
			while(l<h){
				int m=(l+h)/2;
				int j=f[w[i]+m];
				int x=vk[j]-vk[i];
				if(qh(j,N+1)-vh[j]+x>=0){
					h=m;
				}
				else{
					l=m+1;
				}
			}
			cout<<c[N]-c[i]-(l-1)<<' ';
		}
		else{
			int l=i+1,h=N;
			while(l<h){
				int m=(l+h)/2;
				if(qk(i+1,m+1)-vk[i]>=0){
					l=m+1;
				}
				else{
					h=m;
				}
			}
			cout<<(l-1-i)/2<<' ';
		}
	}
	cout<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva4ms3908 KiB
subtask27/7
3Elfogadva3ms2404 KiB
4Elfogadva3ms2416 KiB
subtask39/9
5Elfogadva4ms4360 KiB
6Elfogadva4ms4576 KiB
7Elfogadva4ms4668 KiB
subtask40/14
8Időlimit túllépés550ms175492 KiB
9Időlimit túllépés574ms175784 KiB
10Időlimit túllépés569ms175772 KiB
11Időlimit túllépés578ms176032 KiB
12Időlimit túllépés578ms176128 KiB
13Időlimit túllépés566ms176368 KiB
14Időlimit túllépés580ms176292 KiB
15Időlimit túllépés545ms176272 KiB
subtask511/11
16Elfogadva3ms4160 KiB
17Elfogadva3ms4060 KiB
18Elfogadva3ms4200 KiB
subtask629/29
19Elfogadva4ms5760 KiB
20Elfogadva4ms5704 KiB
21Elfogadva4ms5964 KiB
22Elfogadva4ms6172 KiB
subtask70/30
23Időlimit túllépés612ms178592 KiB
24Időlimit túllépés577ms178692 KiB
25Időlimit túllépés595ms178952 KiB
26Időlimit túllépés542ms179632 KiB
27Időlimit túllépés579ms179968 KiB
28Időlimit túllépés583ms180228 KiB
29Időlimit túllépés587ms180412 KiB
30Időlimit túllépés591ms179212 KiB
31Időlimit túllépés545ms179440 KiB
32Időlimit túllépés586ms180700 KiB
33Időlimit túllépés579ms181060 KiB
34Időlimit túllépés578ms181336 KiB
35Időlimit túllépés569ms181592 KiB
36Időlimit túllépés578ms177416 KiB
37Időlimit túllépés579ms177508 KiB
38Időlimit túllépés564ms177764 KiB
39Időlimit túllépés560ms177660 KiB
40Időlimit túllépés586ms181860 KiB