100522024-03-25 20:22:04111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 70/100565ms364100 KiB
#include <bits/stdc++.h>
using namespace std;

// #define int long long

char bf[11000000];
int bfp=0;

void wc(char c) {
	bf[bfp++] = c;
}

void wu(int i) {
	int x = 1;
	int c = 1;
	while (x <= i / 10) {
		x *= 10;
		c++;
	}
	while (c--) {
		int d = i / x;
		wc('0' + d);
		i -= d * x;
		i *= 10;
	}
}

alignas(64) int tk[20][1000001],th[20][1000001];

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);
	for(int i=0;i<N+1;i++){
		tk[0][i]=vk[i];
		th[0][i]=vh[i];
	}
	for(int j=1;j<20;j++){
		for(int l=0,r=1<<j-1;r<N+1;l++,r++){
			tk[j][l]=min(tk[j-1][l],tk[j-1][r]);
			th[j][l]=min(th[j-1][l],th[j-1][r]);
		}
	}
	auto qk=[&](int l,int r)->int{
		int i=__lg(r-l);
		return min(tk[i][l],tk[i][r-(1<<i)]);
	};
	auto qh=[&](int l,int r)->int{
		int i=__lg(r-l);
		return min(th[i][l],th[i][r-(1<<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;
				}
			}
			wu(c[N]-c[i]-(l-1));wc(' ');
		}
		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;
				}
			}
			wu((l-1-i)/2);wc(' ');
		}
	}
	wc('\n');
	fwrite(bf,sizeof(char),bfp,stdout);
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2000 KiB
2Elfogadva4ms3632 KiB
subtask27/7
3Elfogadva3ms2476 KiB
4Elfogadva3ms2560 KiB
subtask39/9
5Elfogadva4ms4164 KiB
6Elfogadva4ms3996 KiB
7Elfogadva4ms4012 KiB
subtask414/14
8Elfogadva402ms345396 KiB
9Elfogadva377ms346148 KiB
10Elfogadva379ms346184 KiB
11Elfogadva379ms346352 KiB
12Elfogadva305ms350180 KiB
13Elfogadva275ms351736 KiB
14Elfogadva338ms347832 KiB
15Elfogadva389ms347172 KiB
subtask511/11
16Elfogadva3ms3740 KiB
17Elfogadva3ms3744 KiB
18Elfogadva3ms3744 KiB
subtask629/29
19Elfogadva4ms4984 KiB
20Elfogadva4ms5116 KiB
21Elfogadva4ms5292 KiB
22Elfogadva4ms5260 KiB
subtask70/30
23Elfogadva474ms354044 KiB
24Elfogadva479ms353944 KiB
25Elfogadva470ms353928 KiB
26Elfogadva476ms356680 KiB
27Időlimit túllépés565ms358604 KiB
28Elfogadva469ms359528 KiB
29Elfogadva458ms360332 KiB
30Elfogadva470ms356864 KiB
31Elfogadva470ms358380 KiB
32Elfogadva446ms361932 KiB
33Elfogadva418ms362968 KiB
34Elfogadva367ms363696 KiB
35Elfogadva347ms364100 KiB
36Elfogadva300ms350752 KiB
37Elfogadva273ms352244 KiB
38Elfogadva337ms348264 KiB
39Elfogadva388ms347640 KiB
40Elfogadva414ms363808 KiB