100542024-03-25 20:28:26111Nemzetközi Rántott Hús Fesztiválcpp17Time limit exceeded 70/100561ms364876 KiB
#pragma GCC optimize("Ofast")

#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]);
		}
	}
	for(int j=1;j<20;j++){
		for(int l=0,r=1<<j-1;r<N+1;l++,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
1Accepted3ms2004 KiB
2Accepted4ms3712 KiB
subtask27/7
3Accepted3ms2484 KiB
4Accepted3ms2628 KiB
subtask39/9
5Accepted4ms4256 KiB
6Accepted4ms4212 KiB
7Accepted4ms4476 KiB
subtask414/14
8Accepted382ms345888 KiB
9Accepted395ms346804 KiB
10Accepted395ms346972 KiB
11Accepted397ms346940 KiB
12Accepted287ms350688 KiB
13Accepted296ms352076 KiB
14Accepted361ms348016 KiB
15Accepted409ms347652 KiB
subtask511/11
16Accepted3ms4136 KiB
17Accepted3ms4144 KiB
18Accepted3ms4148 KiB
subtask629/29
19Accepted4ms5384 KiB
20Accepted4ms5648 KiB
21Accepted4ms5924 KiB
22Accepted4ms6024 KiB
subtask70/30
23Accepted456ms354680 KiB
24Accepted458ms354672 KiB
25Accepted465ms354884 KiB
26Time limit exceeded561ms180840 KiB
27Time limit exceeded554ms181532 KiB
28Accepted462ms360296 KiB
29Time limit exceeded547ms182488 KiB
30Accepted456ms357728 KiB
31Time limit exceeded555ms359120 KiB
32Accepted435ms363028 KiB
33Accepted493ms363984 KiB
34Accepted358ms364760 KiB
35Accepted337ms364876 KiB
36Accepted287ms351660 KiB
37Accepted298ms353232 KiB
38Accepted323ms349240 KiB
39Accepted379ms348452 KiB
40Accepted365ms364608 KiB