Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <algorithm>
- #define MAXN 250010
- using namespace std;
- int N, P;
- int V[MAXN];
- int memo[MAXN][2];
- int dp(int idx, bool goup) {
- if (idx > N) return 0;
- if (memo[idx][goup] > -1) return memo[idx][goup];
- int best = 0;
- for (int i = idx+1; i <= N; i++) {
- if (goup && V[i] >= V[idx]) {
- best = max(best, dp(i, !goup) + 1);
- }
- else if (!goup && V[i] <= V[idx]) {
- best = max(best, dp(i, !goup) + 1);
- }
- }
- return memo[idx][goup] = best;
- }
- int main() {
- freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- scanf("%d%d", &N, &P);
- for (int i = 1; i <= N; i++) {
- scanf("%d", &V[i]);
- }
- for (int i = 0; i <= N; i++) {
- memo[i][0] = memo[i][1] = -1;
- }
- int res = dp(0, true);
- printf("%d\n", res);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement