#include <bits/stdc++.h> using namespace std; const int N = 1e5+5; const int INF = 1e7+5; int dp[N][2]; int a[N]; int main(){ ios_base::sync_with_stdio(0); int n,res=INF; cin >> n; for(int i=1; i<=n; ++i) cin >> a[i]; // dol gora dol gora a[0] = INF; for(int u=0; u<2; ++u){ for(int i=1; i<=n; ++i){ if(i%2==1){ if(a[i-1] < a[i]){ dp[i][0] = dp[i-1][0]; }else{ dp[i][0] = dp[i-1][1]; } dp[i][1] = min(dp[i-1][0], dp[i-1][1])+1; }else{ if(a[i-1] > a[i]){ dp[i][0] = dp[i-1][0]; }else{ dp[i][0] = dp[i-1][1]; } dp[i][1] = min(dp[i-1][0], dp[i-1][1])+1; } } if(u==0){ for(int i=0; i<=n; ++i){ a[i] *= -1; } } res = min(res, min(dp[n][0], dp[n][1])); } cout << res; 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 | #include <bits/stdc++.h> using namespace std; const int N = 1e5+5; const int INF = 1e7+5; int dp[N][2]; int a[N]; int main(){ ios_base::sync_with_stdio(0); int n,res=INF; cin >> n; for(int i=1; i<=n; ++i) cin >> a[i]; // dol gora dol gora a[0] = INF; for(int u=0; u<2; ++u){ for(int i=1; i<=n; ++i){ if(i%2==1){ if(a[i-1] < a[i]){ dp[i][0] = dp[i-1][0]; }else{ dp[i][0] = dp[i-1][1]; } dp[i][1] = min(dp[i-1][0], dp[i-1][1])+1; }else{ if(a[i-1] > a[i]){ dp[i][0] = dp[i-1][0]; }else{ dp[i][0] = dp[i-1][1]; } dp[i][1] = min(dp[i-1][0], dp[i-1][1])+1; } } if(u==0){ for(int i=0; i<=n; ++i){ a[i] *= -1; } } res = min(res, min(dp[n][0], dp[n][1])); } cout << res; return 0; } |