100562024-03-25 20:30:45111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 70/100570ms365228 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]);
			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
2Elfogadva4ms3636 KiB
subtask27/7
3Elfogadva3ms2544 KiB
4Elfogadva3ms2568 KiB
subtask39/9
5Elfogadva4ms3976 KiB
6Elfogadva4ms4232 KiB
7Elfogadva4ms4448 KiB
subtask414/14
8Elfogadva421ms345612 KiB
9Elfogadva370ms346516 KiB
10Elfogadva370ms346744 KiB
11Elfogadva367ms346684 KiB
12Elfogadva289ms350584 KiB
13Elfogadva266ms352012 KiB
14Elfogadva324ms347920 KiB
15Elfogadva375ms347500 KiB
subtask511/11
16Elfogadva3ms4272 KiB
17Elfogadva3ms4200 KiB
18Elfogadva3ms4452 KiB
subtask629/29
19Elfogadva4ms5848 KiB
20Elfogadva4ms5976 KiB
21Elfogadva4ms6208 KiB
22Elfogadva4ms6364 KiB
subtask70/30
23Időlimit túllépés564ms179700 KiB
24Elfogadva469ms355116 KiB
25Elfogadva460ms355032 KiB
26Elfogadva465ms357760 KiB
27Időlimit túllépés570ms181968 KiB
28Időlimit túllépés558ms360360 KiB
29Időlimit túllépés554ms361564 KiB
30Időlimit túllépés561ms181024 KiB
31Időlimit túllépés558ms359520 KiB
32Időlimit túllépés529ms363220 KiB
33Elfogadva412ms364168 KiB
34Elfogadva356ms364876 KiB
35Elfogadva337ms365228 KiB
36Elfogadva284ms351928 KiB
37Elfogadva264ms353400 KiB
38Elfogadva324ms349492 KiB
39Elfogadva412ms348888 KiB
40Elfogadva372ms364820 KiB