#include <bits/stdc++.h> #define ll long long #define INF 1000000000 #define MLN 1000000 using namespace std; const int MAXN=60000; int tab[MAXN]; bool ok[MAXN]; void solve(){ int N; int odp_1=0,odp_2=0; int a=0,b=0,nb,na; cin>>N; for(int i=1; i<=N; i++){ cin>>tab[i]; } tab[0]=MLN+1; if((N+1)%2==0) tab[N+1]=MLN+1; else tab[N+1]=-(MLN+1); for(int i=1; i<=N; i++){ if(i%2==0){ if(tab[i]>tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=-MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } }else{ if(tab[i]<tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=-MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } } a=na; b=nb; } odp_1=min(a,b); a=0; b=0; tab[0]=-(MLN+1); if((N+1)%2==0) tab[N+1]=-(MLN+1); else tab[N+1]=MLN+1; for(int i=1; i<=N; i++){ if(i%2==1){ if(tab[i]>tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=-MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } }else{ if(tab[i]<tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=-MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } } a=na; b=nb; } odp_2=min(a,b); // cout<<odp_1<<" "<<odp_2<<"\n"; cout<<min(odp_1,odp_2)<<"\n"; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); solve(); 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #include <bits/stdc++.h> #define ll long long #define INF 1000000000 #define MLN 1000000 using namespace std; const int MAXN=60000; int tab[MAXN]; bool ok[MAXN]; void solve(){ int N; int odp_1=0,odp_2=0; int a=0,b=0,nb,na; cin>>N; for(int i=1; i<=N; i++){ cin>>tab[i]; } tab[0]=MLN+1; if((N+1)%2==0) tab[N+1]=MLN+1; else tab[N+1]=-(MLN+1); for(int i=1; i<=N; i++){ if(i%2==0){ if(tab[i]>tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=-MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } }else{ if(tab[i]<tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=-MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } } a=na; b=nb; } odp_1=min(a,b); a=0; b=0; tab[0]=-(MLN+1); if((N+1)%2==0) tab[N+1]=-(MLN+1); else tab[N+1]=MLN+1; for(int i=1; i<=N; i++){ if(i%2==1){ if(tab[i]>tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=-MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } }else{ if(tab[i]<tab[i-1]){ na=min(a,b); nb=min(a,b)+1; }else{ if(tab[i]!=MLN){ na=b; }else{ na=INF; } if(tab[i-1]!=-MLN){ nb=min(a,b)+1; }else{ nb=b+1; } } } a=na; b=nb; } odp_2=min(a,b); // cout<<odp_1<<" "<<odp_2<<"\n"; cout<<min(odp_1,odp_2)<<"\n"; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); solve(); return 0; } |