100542024-03-25 20:28:26111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2004 KiB
2Elfogadva4ms3712 KiB
subtask27/7
3Elfogadva3ms2484 KiB
4Elfogadva3ms2628 KiB
subtask39/9
5Elfogadva4ms4256 KiB
6Elfogadva4ms4212 KiB
7Elfogadva4ms4476 KiB
subtask414/14
8Elfogadva382ms345888 KiB
9Elfogadva395ms346804 KiB
10Elfogadva395ms346972 KiB
11Elfogadva397ms346940 KiB
12Elfogadva287ms350688 KiB
13Elfogadva296ms352076 KiB
14Elfogadva361ms348016 KiB
15Elfogadva409ms347652 KiB
subtask511/11
16Elfogadva3ms4136 KiB
17Elfogadva3ms4144 KiB
18Elfogadva3ms4148 KiB
subtask629/29
19Elfogadva4ms5384 KiB
20Elfogadva4ms5648 KiB
21Elfogadva4ms5924 KiB
22Elfogadva4ms6024 KiB
subtask70/30
23Elfogadva456ms354680 KiB
24Elfogadva458ms354672 KiB
25Elfogadva465ms354884 KiB
26Időlimit túllépés561ms180840 KiB
27Időlimit túllépés554ms181532 KiB
28Elfogadva462ms360296 KiB
29Időlimit túllépés547ms182488 KiB
30Elfogadva456ms357728 KiB
31Időlimit túllépés555ms359120 KiB
32Elfogadva435ms363028 KiB
33Elfogadva493ms363984 KiB
34Elfogadva358ms364760 KiB
35Elfogadva337ms364876 KiB
36Elfogadva287ms351660 KiB
37Elfogadva298ms353232 KiB
38Elfogadva323ms349240 KiB
39Elfogadva379ms348452 KiB
40Elfogadva365ms364608 KiB