#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; }
2797번: TRAMPOLIN
https://www.acmicpc.net/problem/2797
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기