#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; } |
English