100562024-03-25 20:30:45111Nemzetközi Rántott Hús Fesztiválcpp17Time limit exceeded 70/100570ms365228 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]);
			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
2Accepted4ms3636 KiB
subtask27/7
3Accepted3ms2544 KiB
4Accepted3ms2568 KiB
subtask39/9
5Accepted4ms3976 KiB
6Accepted4ms4232 KiB
7Accepted4ms4448 KiB
subtask414/14
8Accepted421ms345612 KiB
9Accepted370ms346516 KiB
10Accepted370ms346744 KiB
11Accepted367ms346684 KiB
12Accepted289ms350584 KiB
13Accepted266ms352012 KiB
14Accepted324ms347920 KiB
15Accepted375ms347500 KiB
subtask511/11
16Accepted3ms4272 KiB
17Accepted3ms4200 KiB
18Accepted3ms4452 KiB
subtask629/29
19Accepted4ms5848 KiB
20Accepted4ms5976 KiB
21Accepted4ms6208 KiB
22Accepted4ms6364 KiB
subtask70/30
23Time limit exceeded564ms179700 KiB
24Accepted469ms355116 KiB
25Accepted460ms355032 KiB
26Accepted465ms357760 KiB
27Time limit exceeded570ms181968 KiB
28Time limit exceeded558ms360360 KiB
29Time limit exceeded554ms361564 KiB
30Time limit exceeded561ms181024 KiB
31Time limit exceeded558ms359520 KiB
32Time limit exceeded529ms363220 KiB
33Accepted412ms364168 KiB
34Accepted356ms364876 KiB
35Accepted337ms365228 KiB
36Accepted284ms351928 KiB
37Accepted264ms353400 KiB
38Accepted324ms349492 KiB
39Accepted412ms348888 KiB
40Accepted372ms364820 KiB