100572024-03-25 20:33:10111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 70/100564ms364528 KiB


#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("fma")

// #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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2004 KiB
2Elfogadva4ms3632 KiB
subtask27/7
3Elfogadva3ms2416 KiB
4Elfogadva3ms2668 KiB
subtask39/9
5Elfogadva4ms4260 KiB
6Elfogadva4ms4552 KiB
7Elfogadva4ms4600 KiB
subtask414/14
8Elfogadva442ms345896 KiB
9Elfogadva412ms346524 KiB
10Elfogadva419ms346524 KiB
11Elfogadva419ms346480 KiB
12Elfogadva333ms350092 KiB
13Elfogadva301ms351596 KiB
14Elfogadva375ms347612 KiB
15Elfogadva430ms346956 KiB
subtask511/11
16Elfogadva3ms3772 KiB
17Elfogadva3ms3740 KiB
18Elfogadva3ms3996 KiB
subtask629/29
19Elfogadva4ms5324 KiB
20Elfogadva4ms5320 KiB
21Elfogadva4ms5600 KiB
22Elfogadva4ms5564 KiB
subtask70/30
23Időlimit túllépés564ms354216 KiB
24Elfogadva479ms354408 KiB
25Elfogadva467ms354540 KiB
26Elfogadva469ms357288 KiB
27Időlimit túllépés558ms181284 KiB
28Időlimit túllépés555ms359848 KiB
29Időlimit túllépés545ms360648 KiB
30Elfogadva469ms357364 KiB
31Időlimit túllépés564ms180876 KiB
32Elfogadva444ms362452 KiB
33Elfogadva404ms363460 KiB
34Elfogadva407ms364156 KiB
35Elfogadva370ms364528 KiB
36Elfogadva330ms351292 KiB
37Elfogadva277ms352884 KiB
38Elfogadva340ms348824 KiB
39Elfogadva397ms348200 KiB
40Elfogadva419ms364300 KiB