페이지

2797번: TRAMPOLIN

https://www.acmicpc.net/problem/2797

#include<cstdio>
#include<algorithm>
using namespace std;
const int MXN = 3e5;
int n, k, a[MXN], ck[MXN], cnt, dp[2][MXN];
char s[MXN + 1];
int main() {
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i++) scanf("%d", a + i);
    scanf("%s", s);
    for (int i = 0, t = 1e9; i < n; i++) {
        if (s[i] == 'T') t = 0;
        if (a[i] >= t) {
            t = a[i];
            cnt += !ck[i];
            ck[i] = 1;
        }
        else t = 1e9;
    }
    for (int i = n, t = 1e9; i--;) {
        if (s[i] == 'T') t = 0;
        if (a[i] >= t) {
            t = a[i];
            cnt += !ck[i];
            ck[i] = 1;
        }
        else t = 1e9;
    }
    dp[0][0] = !ck[0];
    for (int i = 1; i < n; i++) {
        if (!ck[i]) dp[0][i] = (a[i - 1] <= a[i])*dp[0][i - 1] + 1;
    }
    dp[1][n - 1] = !ck[n - 1];
    for (int i = n - 1; i--;) {
        if (!ck[i]) dp[1][i] = (a[i + 1] <= a[i])*dp[1][i + 1] + 1;
    }
    k--;
    if (ck[k]) {
        printf("%d", cnt + *max_element(dp[0], dp[2]));
    }
    else {
        int r = 0;
        for (int i = k; i >= 0 && a[i] == a[k]; i--) r = max({ r,dp[0][i],dp[1][i] });
        for (int i = k; i < n&&a[i] == a[k]; i++) r = max({ r,dp[0][i],dp[1][i] });
        printf("%d", r);
    }
    return 0;
}

댓글 없음 :

댓글 쓰기