10052 2024. 03. 25 20:22:04 111 Nemzetközi Rántott Hús Fesztivál cpp17 Időlimit túllépés 70/100 565ms 364100 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]);
			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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 2000 KiB
2 Elfogadva 4ms 3632 KiB
subtask2 7/7
3 Elfogadva 3ms 2476 KiB
4 Elfogadva 3ms 2560 KiB
subtask3 9/9
5 Elfogadva 4ms 4164 KiB
6 Elfogadva 4ms 3996 KiB
7 Elfogadva 4ms 4012 KiB
subtask4 14/14
8 Elfogadva 402ms 345396 KiB
9 Elfogadva 377ms 346148 KiB
10 Elfogadva 379ms 346184 KiB
11 Elfogadva 379ms 346352 KiB
12 Elfogadva 305ms 350180 KiB
13 Elfogadva 275ms 351736 KiB
14 Elfogadva 338ms 347832 KiB
15 Elfogadva 389ms 347172 KiB
subtask5 11/11
16 Elfogadva 3ms 3740 KiB
17 Elfogadva 3ms 3744 KiB
18 Elfogadva 3ms 3744 KiB
subtask6 29/29
19 Elfogadva 4ms 4984 KiB
20 Elfogadva 4ms 5116 KiB
21 Elfogadva 4ms 5292 KiB
22 Elfogadva 4ms 5260 KiB
subtask7 0/30
23 Elfogadva 474ms 354044 KiB
24 Elfogadva 479ms 353944 KiB
25 Elfogadva 470ms 353928 KiB
26 Elfogadva 476ms 356680 KiB
27 Időlimit túllépés 565ms 358604 KiB
28 Elfogadva 469ms 359528 KiB
29 Elfogadva 458ms 360332 KiB
30 Elfogadva 470ms 356864 KiB
31 Elfogadva 470ms 358380 KiB
32 Elfogadva 446ms 361932 KiB
33 Elfogadva 418ms 362968 KiB
34 Elfogadva 367ms 363696 KiB
35 Elfogadva 347ms 364100 KiB
36 Elfogadva 300ms 350752 KiB
37 Elfogadva 273ms 352244 KiB
38 Elfogadva 337ms 348264 KiB
39 Elfogadva 388ms 347640 KiB
40 Elfogadva 414ms 363808 KiB