10054 2024. 03. 25 20:28:26 111 Nemzetközi Rántott Hús Fesztivál cpp17 Időlimit túllépés 70/100 561ms 364876 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 2004 KiB
2 Elfogadva 4ms 3712 KiB
subtask2 7/7
3 Elfogadva 3ms 2484 KiB
4 Elfogadva 3ms 2628 KiB
subtask3 9/9
5 Elfogadva 4ms 4256 KiB
6 Elfogadva 4ms 4212 KiB
7 Elfogadva 4ms 4476 KiB
subtask4 14/14
8 Elfogadva 382ms 345888 KiB
9 Elfogadva 395ms 346804 KiB
10 Elfogadva 395ms 346972 KiB
11 Elfogadva 397ms 346940 KiB
12 Elfogadva 287ms 350688 KiB
13 Elfogadva 296ms 352076 KiB
14 Elfogadva 361ms 348016 KiB
15 Elfogadva 409ms 347652 KiB
subtask5 11/11
16 Elfogadva 3ms 4136 KiB
17 Elfogadva 3ms 4144 KiB
18 Elfogadva 3ms 4148 KiB
subtask6 29/29
19 Elfogadva 4ms 5384 KiB
20 Elfogadva 4ms 5648 KiB
21 Elfogadva 4ms 5924 KiB
22 Elfogadva 4ms 6024 KiB
subtask7 0/30
23 Elfogadva 456ms 354680 KiB
24 Elfogadva 458ms 354672 KiB
25 Elfogadva 465ms 354884 KiB
26 Időlimit túllépés 561ms 180840 KiB
27 Időlimit túllépés 554ms 181532 KiB
28 Elfogadva 462ms 360296 KiB
29 Időlimit túllépés 547ms 182488 KiB
30 Elfogadva 456ms 357728 KiB
31 Időlimit túllépés 555ms 359120 KiB
32 Elfogadva 435ms 363028 KiB
33 Elfogadva 493ms 363984 KiB
34 Elfogadva 358ms 364760 KiB
35 Elfogadva 337ms 364876 KiB
36 Elfogadva 287ms 351660 KiB
37 Elfogadva 298ms 353232 KiB
38 Elfogadva 323ms 349240 KiB
39 Elfogadva 379ms 348452 KiB
40 Elfogadva 365ms 364608 KiB