10058 2024. 03. 25 20:34:28 111 Nemzetközi Rántott Hús Fesztivál cpp17 Időlimit túllépés 70/100 574ms 364764 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 2000 KiB
2 Elfogadva 4ms 3712 KiB
subtask2 7/7
3 Elfogadva 3ms 2492 KiB
4 Elfogadva 3ms 2500 KiB
subtask3 9/9
5 Elfogadva 4ms 4144 KiB
6 Elfogadva 4ms 4096 KiB
7 Elfogadva 4ms 4104 KiB
subtask4 14/14
8 Elfogadva 411ms 345572 KiB
9 Elfogadva 419ms 346364 KiB
10 Elfogadva 419ms 346320 KiB
11 Elfogadva 391ms 346532 KiB
12 Elfogadva 310ms 350488 KiB
13 Elfogadva 317ms 351828 KiB
14 Elfogadva 379ms 348064 KiB
15 Elfogadva 430ms 347404 KiB
subtask5 11/11
16 Elfogadva 3ms 3972 KiB
17 Elfogadva 3ms 4240 KiB
18 Elfogadva 3ms 4196 KiB
subtask6 29/29
19 Elfogadva 4ms 5572 KiB
20 Elfogadva 4ms 5696 KiB
21 Elfogadva 4ms 5860 KiB
22 Elfogadva 4ms 5816 KiB
subtask7 0/30
23 Elfogadva 483ms 354452 KiB
24 Időlimit túllépés 574ms 178692 KiB
25 Elfogadva 481ms 354788 KiB
26 Időlimit túllépés 561ms 180080 KiB
27 Időlimit túllépés 574ms 181424 KiB
28 Időlimit túllépés 556ms 181480 KiB
29 Időlimit túllépés 560ms 182376 KiB
30 Elfogadva 477ms 357700 KiB
31 Időlimit túllépés 570ms 181524 KiB
32 Időlimit túllépés 544ms 362900 KiB
33 Időlimit túllépés 503ms 363860 KiB
34 Elfogadva 428ms 364376 KiB
35 Elfogadva 391ms 364764 KiB
36 Elfogadva 312ms 351480 KiB
37 Elfogadva 314ms 353020 KiB
38 Elfogadva 345ms 349196 KiB
39 Elfogadva 432ms 348536 KiB
40 Elfogadva 441ms 364672 KiB