100512024-03-25 20:17:00111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 56/100569ms352368 KiB
#include <bits/stdc++.h>
using namespace std;

// #define int long long

alignas(64) int tk[20][1000001],th[20][1000001];

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N=1000000;
	cin>>N;
	string S;
	for(int i=0;i<N;i++){
	  S+="MHK"[rand()%3];
	}
	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;
				}
			}
			cout<<c[N]-c[i]-(l-1)<<' ';
		}
		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;
				}
			}
			cout<<(l-1-i)/2<<' ';
		}
	}
	cout<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2004 KiB
2Elfogadva4ms3704 KiB
subtask27/7
3Elfogadva3ms2228 KiB
4Elfogadva3ms2488 KiB
subtask39/9
5Elfogadva4ms4248 KiB
6Elfogadva4ms4284 KiB
7Elfogadva4ms4408 KiB
subtask40/14
8Időlimit túllépés509ms341364 KiB
9Időlimit túllépés521ms341588 KiB
10Elfogadva488ms341620 KiB
11Időlimit túllépés523ms341592 KiB
12Elfogadva397ms341664 KiB
13Elfogadva361ms341852 KiB
14Elfogadva444ms341792 KiB
15Elfogadva495ms341872 KiB
subtask511/11
16Elfogadva3ms4112 KiB
17Elfogadva3ms4076 KiB
18Elfogadva3ms4088 KiB
subtask629/29
19Elfogadva4ms5568 KiB
20Elfogadva4ms5520 KiB
21Elfogadva4ms5788 KiB
22Elfogadva4ms5888 KiB
subtask70/30
23Időlimit túllépés566ms346940 KiB
24Időlimit túllépés532ms175364 KiB
25Időlimit túllépés569ms175380 KiB
26Időlimit túllépés556ms348432 KiB
27Időlimit túllépés541ms349272 KiB
28Időlimit túllépés540ms349776 KiB
29Időlimit túllépés529ms350172 KiB
30Időlimit túllépés541ms347784 KiB
31Időlimit túllépés538ms348412 KiB
32Időlimit túllépés508ms351124 KiB
33Elfogadva476ms351800 KiB
34Elfogadva419ms352280 KiB
35Elfogadva402ms352368 KiB
36Elfogadva398ms342724 KiB
37Elfogadva361ms342716 KiB
38Elfogadva442ms342704 KiB
39Elfogadva495ms342708 KiB
40Elfogadva493ms352144 KiB