// Jan Zakrzewski
#include <bits/stdc++.h>
using namespace std;
int constexpr N = 3e5 + 10;
int n; // liczba mrówek, jak w treści zadania
char s[N]; // początkowe zwroty mrówek, jak w treści zadania
int a[N]; // 1 <= i <= n, a[i] = liczba mrówek na lewo od i-tej mrówki, które początkowo idą w prawo
int b[N]; // 1 <= i <= n, b[i] = liczba mrówek na prawo od i-tej mrówki, które początkowo idą w lewo
int odp[N]; // 1 <= i <= n, odp[i] = liczba odbić i-tej mrówki
/* Saved for potential future debugging
int L(int, int);
int P(int, int);
int L(int z_lewej, int z_prawej) {
    if(z_lewej == 0) return 0;
    else return 1 + P(z_lewej - 1, z_prawej);
}
int P(int z_lewej, int z_prawej) {
    if(z_prawej == 0) return 0;
    else return 1 + L(z_lewej, z_prawej - 1);
}*/
int LL(int z_lewej, int z_prawej) {
    if(z_lewej > z_prawej) return 2 * z_prawej + 1;
    else return 2 * z_lewej;
}
int PP(int z_lewej, int z_prawej) {
    if(z_lewej < z_prawej) return 2 * z_lewej + 1;
    else return 2 * z_prawej;
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n;
    cin >> s; for(int i = n; i >= 1; --i) s[i] = s[i-1];
    a[1] = 0;
    for(int i = 2; i <= n; ++i) {
        a[i] = a[i - 1];
        if(s[i - 1] == 'P')
            ++a[i];
    }
    b[n] = 0;
    for(int i = n - 1; i >= 1; --i) {
        b[i] = b[i + 1];
        if(s[i + 1] == 'L')
            ++b[i];
    }
    for(int i = 1; i <= n; ++i) {
        if(s[i] == 'L') cout << LL(a[i], b[i]) << " ";
        else if(s[i] == 'P') cout << PP(a[i], b[i]) << " ";
        else cout << "What are you doing? ";
    }
    cout << "\n";
    return 0;
}
        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 55 56 57 58 59 60 61 62 63 64 65  | // Jan Zakrzewski #include <bits/stdc++.h> using namespace std; int constexpr N = 3e5 + 10; int n; // liczba mrówek, jak w treści zadania char s[N]; // początkowe zwroty mrówek, jak w treści zadania int a[N]; // 1 <= i <= n, a[i] = liczba mrówek na lewo od i-tej mrówki, które początkowo idą w prawo int b[N]; // 1 <= i <= n, b[i] = liczba mrówek na prawo od i-tej mrówki, które początkowo idą w lewo int odp[N]; // 1 <= i <= n, odp[i] = liczba odbić i-tej mrówki /* Saved for potential future debugging int L(int, int); int P(int, int); int L(int z_lewej, int z_prawej) { if(z_lewej == 0) return 0; else return 1 + P(z_lewej - 1, z_prawej); } int P(int z_lewej, int z_prawej) { if(z_prawej == 0) return 0; else return 1 + L(z_lewej, z_prawej - 1); }*/ int LL(int z_lewej, int z_prawej) { if(z_lewej > z_prawej) return 2 * z_prawej + 1; else return 2 * z_lewej; } int PP(int z_lewej, int z_prawej) { if(z_lewej < z_prawej) return 2 * z_lewej + 1; else return 2 * z_prawej; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; cin >> s; for(int i = n; i >= 1; --i) s[i] = s[i-1]; a[1] = 0; for(int i = 2; i <= n; ++i) { a[i] = a[i - 1]; if(s[i - 1] == 'P') ++a[i]; } b[n] = 0; for(int i = n - 1; i >= 1; --i) { b[i] = b[i + 1]; if(s[i + 1] == 'L') ++b[i]; } for(int i = 1; i <= n; ++i) { if(s[i] == 'L') cout << LL(a[i], b[i]) << " "; else if(s[i] == 'P') cout << PP(a[i], b[i]) << " "; else cout << "What are you doing? "; } cout << "\n"; return 0; }  | 
            
        
                    English