10056 2024. 03. 25 20:30:45 111 Nemzetközi Rántott Hús Fesztivál cpp17 Időlimit túllépés 70/100 570ms 365228 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 2004 KiB
2 Elfogadva 4ms 3636 KiB
subtask2 7/7
3 Elfogadva 3ms 2544 KiB
4 Elfogadva 3ms 2568 KiB
subtask3 9/9
5 Elfogadva 4ms 3976 KiB
6 Elfogadva 4ms 4232 KiB
7 Elfogadva 4ms 4448 KiB
subtask4 14/14
8 Elfogadva 421ms 345612 KiB
9 Elfogadva 370ms 346516 KiB
10 Elfogadva 370ms 346744 KiB
11 Elfogadva 367ms 346684 KiB
12 Elfogadva 289ms 350584 KiB
13 Elfogadva 266ms 352012 KiB
14 Elfogadva 324ms 347920 KiB
15 Elfogadva 375ms 347500 KiB
subtask5 11/11
16 Elfogadva 3ms 4272 KiB
17 Elfogadva 3ms 4200 KiB
18 Elfogadva 3ms 4452 KiB
subtask6 29/29
19 Elfogadva 4ms 5848 KiB
20 Elfogadva 4ms 5976 KiB
21 Elfogadva 4ms 6208 KiB
22 Elfogadva 4ms 6364 KiB
subtask7 0/30
23 Időlimit túllépés 564ms 179700 KiB
24 Elfogadva 469ms 355116 KiB
25 Elfogadva 460ms 355032 KiB
26 Elfogadva 465ms 357760 KiB
27 Időlimit túllépés 570ms 181968 KiB
28 Időlimit túllépés 558ms 360360 KiB
29 Időlimit túllépés 554ms 361564 KiB
30 Időlimit túllépés 561ms 181024 KiB
31 Időlimit túllépés 558ms 359520 KiB
32 Időlimit túllépés 529ms 363220 KiB
33 Elfogadva 412ms 364168 KiB
34 Elfogadva 356ms 364876 KiB
35 Elfogadva 337ms 365228 KiB
36 Elfogadva 284ms 351928 KiB
37 Elfogadva 264ms 353400 KiB
38 Elfogadva 324ms 349492 KiB
39 Elfogadva 412ms 348888 KiB
40 Elfogadva 372ms 364820 KiB