100572024-03-25 20:33:10111Nemzetközi Rántott Hús Fesztiválcpp17Time limit exceeded 70/100564ms364528 KiB


#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("fma")

// #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
1Accepted3ms2004 KiB
2Accepted4ms3632 KiB
subtask27/7
3Accepted3ms2416 KiB
4Accepted3ms2668 KiB
subtask39/9
5Accepted4ms4260 KiB
6Accepted4ms4552 KiB
7Accepted4ms4600 KiB
subtask414/14
8Accepted442ms345896 KiB
9Accepted412ms346524 KiB
10Accepted419ms346524 KiB
11Accepted419ms346480 KiB
12Accepted333ms350092 KiB
13Accepted301ms351596 KiB
14Accepted375ms347612 KiB
15Accepted430ms346956 KiB
subtask511/11
16Accepted3ms3772 KiB
17Accepted3ms3740 KiB
18Accepted3ms3996 KiB
subtask629/29
19Accepted4ms5324 KiB
20Accepted4ms5320 KiB
21Accepted4ms5600 KiB
22Accepted4ms5564 KiB
subtask70/30
23Time limit exceeded564ms354216 KiB
24Accepted479ms354408 KiB
25Accepted467ms354540 KiB
26Accepted469ms357288 KiB
27Time limit exceeded558ms181284 KiB
28Time limit exceeded555ms359848 KiB
29Time limit exceeded545ms360648 KiB
30Accepted469ms357364 KiB
31Time limit exceeded564ms180876 KiB
32Accepted444ms362452 KiB
33Accepted404ms363460 KiB
34Accepted407ms364156 KiB
35Accepted370ms364528 KiB
36Accepted330ms351292 KiB
37Accepted277ms352884 KiB
38Accepted340ms348824 KiB
39Accepted397ms348200 KiB
40Accepted419ms364300 KiB