100552024-03-25 20:29:46111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 70/100564ms364568 KiB


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

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

// #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
1Elfogadva3ms2072 KiB
2Elfogadva4ms3696 KiB
subtask27/7
3Elfogadva3ms2540 KiB
4Elfogadva3ms2612 KiB
subtask39/9
5Elfogadva4ms3852 KiB
6Elfogadva4ms4108 KiB
7Elfogadva3ms4064 KiB
subtask414/14
8Elfogadva384ms345224 KiB
9Elfogadva358ms345888 KiB
10Elfogadva361ms345844 KiB
11Elfogadva368ms345872 KiB
12Elfogadva284ms349416 KiB
13Elfogadva259ms350916 KiB
14Elfogadva326ms346932 KiB
15Elfogadva372ms346484 KiB
subtask511/11
16Elfogadva3ms3060 KiB
17Elfogadva3ms3336 KiB
18Elfogadva3ms3604 KiB
subtask629/29
19Elfogadva4ms4944 KiB
20Elfogadva4ms4752 KiB
21Elfogadva4ms4908 KiB
22Elfogadva4ms4904 KiB
subtask70/30
23Elfogadva462ms353456 KiB
24Elfogadva462ms353452 KiB
25Elfogadva462ms353536 KiB
26Elfogadva462ms356336 KiB
27Időlimit túllépés560ms358172 KiB
28Elfogadva462ms359096 KiB
29Elfogadva453ms360080 KiB
30Időlimit túllépés559ms179528 KiB
31Időlimit túllépés564ms180596 KiB
32Elfogadva439ms362196 KiB
33Elfogadva411ms363224 KiB
34Elfogadva407ms364000 KiB
35Elfogadva335ms364512 KiB
36Elfogadva321ms351484 KiB
37Elfogadva263ms353056 KiB
38Elfogadva319ms348988 KiB
39Elfogadva375ms348376 KiB
40Elfogadva370ms364568 KiB