100552024-03-25 20:29:46111Nemzetközi Rántott Hús Fesztiválcpp17Time limit exceeded 70/100564ms364568 KiB


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

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

// #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
1Accepted3ms2072 KiB
2Accepted4ms3696 KiB
subtask27/7
3Accepted3ms2540 KiB
4Accepted3ms2612 KiB
subtask39/9
5Accepted4ms3852 KiB
6Accepted4ms4108 KiB
7Accepted3ms4064 KiB
subtask414/14
8Accepted384ms345224 KiB
9Accepted358ms345888 KiB
10Accepted361ms345844 KiB
11Accepted368ms345872 KiB
12Accepted284ms349416 KiB
13Accepted259ms350916 KiB
14Accepted326ms346932 KiB
15Accepted372ms346484 KiB
subtask511/11
16Accepted3ms3060 KiB
17Accepted3ms3336 KiB
18Accepted3ms3604 KiB
subtask629/29
19Accepted4ms4944 KiB
20Accepted4ms4752 KiB
21Accepted4ms4908 KiB
22Accepted4ms4904 KiB
subtask70/30
23Accepted462ms353456 KiB
24Accepted462ms353452 KiB
25Accepted462ms353536 KiB
26Accepted462ms356336 KiB
27Time limit exceeded560ms358172 KiB
28Accepted462ms359096 KiB
29Accepted453ms360080 KiB
30Time limit exceeded559ms179528 KiB
31Time limit exceeded564ms180596 KiB
32Accepted439ms362196 KiB
33Accepted411ms363224 KiB
34Accepted407ms364000 KiB
35Accepted335ms364512 KiB
36Accepted321ms351484 KiB
37Accepted263ms353056 KiB
38Accepted319ms348988 KiB
39Accepted375ms348376 KiB
40Accepted370ms364568 KiB