100522024-03-25 20:22:04111Nemzetközi Rántott Hús Fesztiválcpp17Time limit exceeded 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;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms2000 KiB
2Accepted4ms3632 KiB
subtask27/7
3Accepted3ms2476 KiB
4Accepted3ms2560 KiB
subtask39/9
5Accepted4ms4164 KiB
6Accepted4ms3996 KiB
7Accepted4ms4012 KiB
subtask414/14
8Accepted402ms345396 KiB
9Accepted377ms346148 KiB
10Accepted379ms346184 KiB
11Accepted379ms346352 KiB
12Accepted305ms350180 KiB
13Accepted275ms351736 KiB
14Accepted338ms347832 KiB
15Accepted389ms347172 KiB
subtask511/11
16Accepted3ms3740 KiB
17Accepted3ms3744 KiB
18Accepted3ms3744 KiB
subtask629/29
19Accepted4ms4984 KiB
20Accepted4ms5116 KiB
21Accepted4ms5292 KiB
22Accepted4ms5260 KiB
subtask70/30
23Accepted474ms354044 KiB
24Accepted479ms353944 KiB
25Accepted470ms353928 KiB
26Accepted476ms356680 KiB
27Time limit exceeded565ms358604 KiB
28Accepted469ms359528 KiB
29Accepted458ms360332 KiB
30Accepted470ms356864 KiB
31Accepted470ms358380 KiB
32Accepted446ms361932 KiB
33Accepted418ms362968 KiB
34Accepted367ms363696 KiB
35Accepted347ms364100 KiB
36Accepted300ms350752 KiB
37Accepted273ms352244 KiB
38Accepted337ms348264 KiB
39Accepted388ms347640 KiB
40Accepted414ms363808 KiB