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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <bits/stdc++.h>
using namespace std;
const int base = 512 * 1024;
int tree[base * 2];
inline void add(int l,int p,int x){
    l+=base - 1;
    p+=base + 1;
    while(l / 2 != p / 2){
        if(l % 2 == 0){
            tree[l + 1]+=x;
        }
        if(p % 2 == 1){
            tree[p - 1]+=x;
        }
        l/=2;
        p/=2;
    }
}
inline int query(int v){
    int x = 0;
    v+=base;
    while(v > 0){
        x+=tree[v];
        v/=2;
    }
    return x;
}
int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin>>n;
    int cnt = 0;
    string W;
    cin>>W;
    for(int i = 0; i < W.size() - 1;++i){
        if(W[i] == 'P'){
            ++cnt;
        }
        if(W[i + 1] == 'L' && cnt != 0){
            if(cnt == 1){
                add(i,i,1);
                add(i + 1,i + 1,1);
            }else{
                add(i - cnt + 2,i,2);
                add(i - cnt + 1,i - cnt + 1,1);
                add(i + 1,i + 1,1);
            }
        }
    }
    for(int i = 0; i < n;++i){
        cout<<query(i) <<" ";
    }
}