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