1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;
int t[1<<20];
void dodaj(int w,int p,int k,int szp,int szk){
	if(szp<=p&&k<=szk){t[w]+=2;return;}
	int sr=(p+k)/2;
	if(sr>=szp)dodaj(w<<1,p,sr,szp,szk);
	if(sr<szk)dodaj(w*2+1,sr+1,k,szp,szk);
}
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n,mro=0;
	string s;
	cin>>n; cin>>s;
	for(int i=0;i<n;++i){//obecna rozpatrywana mrowka
		if(s[i]=='P')++mro;
		else if(mro){//mrowki idace w lewo niczego nie napotkaly
			++t[i+(1<<19)];++t[i-mro+(1<<19)];
			if(mro>1)dodaj(1,1,1<<19,i-mro+2,i);
		}
	}
	for(int i=1;i<(1<<19);++i){t[i*2]+=t[i];t[i*2+1]+=t[i];}
	for(int i=0;i<n;++i){cout<<t[i+(1<<19)]<<" ";}
}