100582024-03-25 20:34:28111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 70/100574ms364764 KiB
#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
1Elfogadva3ms2000 KiB
2Elfogadva4ms3712 KiB
subtask27/7
3Elfogadva3ms2492 KiB
4Elfogadva3ms2500 KiB
subtask39/9
5Elfogadva4ms4144 KiB
6Elfogadva4ms4096 KiB
7Elfogadva4ms4104 KiB
subtask414/14
8Elfogadva411ms345572 KiB
9Elfogadva419ms346364 KiB
10Elfogadva419ms346320 KiB
11Elfogadva391ms346532 KiB
12Elfogadva310ms350488 KiB
13Elfogadva317ms351828 KiB
14Elfogadva379ms348064 KiB
15Elfogadva430ms347404 KiB
subtask511/11
16Elfogadva3ms3972 KiB
17Elfogadva3ms4240 KiB
18Elfogadva3ms4196 KiB
subtask629/29
19Elfogadva4ms5572 KiB
20Elfogadva4ms5696 KiB
21Elfogadva4ms5860 KiB
22Elfogadva4ms5816 KiB
subtask70/30
23Elfogadva483ms354452 KiB
24Időlimit túllépés574ms178692 KiB
25Elfogadva481ms354788 KiB
26Időlimit túllépés561ms180080 KiB
27Időlimit túllépés574ms181424 KiB
28Időlimit túllépés556ms181480 KiB
29Időlimit túllépés560ms182376 KiB
30Elfogadva477ms357700 KiB
31Időlimit túllépés570ms181524 KiB
32Időlimit túllépés544ms362900 KiB
33Időlimit túllépés503ms363860 KiB
34Elfogadva428ms364376 KiB
35Elfogadva391ms364764 KiB
36Elfogadva312ms351480 KiB
37Elfogadva314ms353020 KiB
38Elfogadva345ms349196 KiB
39Elfogadva432ms348536 KiB
40Elfogadva441ms364672 KiB