#include <bits/stdc++.h> using namespace std; #define INF 1000000000 int odp(vector<int> &B, bool znak){ int ans = 0; vector<bool> Zm(B.size(), 0);//czy byla zmiana danej liczby for(int i = 0; i<B.size()-1; i++){ if(znak){ if(!Zm[i]){//bo jesli poprzednia byla zmieniona, to zmiana tej jest tylko gdy ona jest rowna min if(B[i+1]<=B[i]){ ans++; Zm[i+1] = true; } }else{ if(B[i+1]==-INF){ Zm[i+1] = true; ans++; } } znak = false; }else{ if(!Zm[i]){ if(B[i+1]>=B[i]){ ans++; Zm[i+1] = true; } }else{ if(B[i+1]==INF){ Zm[i+1] = true; ans++; } } znak = true; } } return ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> B(n); for(auto &a : B){ cin >> a; } cout << min(odp(B, false), odp(B, true)) << "\n"; 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 | #include <bits/stdc++.h> using namespace std; #define INF 1000000000 int odp(vector<int> &B, bool znak){ int ans = 0; vector<bool> Zm(B.size(), 0);//czy byla zmiana danej liczby for(int i = 0; i<B.size()-1; i++){ if(znak){ if(!Zm[i]){//bo jesli poprzednia byla zmieniona, to zmiana tej jest tylko gdy ona jest rowna min if(B[i+1]<=B[i]){ ans++; Zm[i+1] = true; } }else{ if(B[i+1]==-INF){ Zm[i+1] = true; ans++; } } znak = false; }else{ if(!Zm[i]){ if(B[i+1]>=B[i]){ ans++; Zm[i+1] = true; } }else{ if(B[i+1]==INF){ Zm[i+1] = true; ans++; } } znak = true; } } return ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> B(n); for(auto &a : B){ cin >> a; } cout << min(odp(B, false), odp(B, true)) << "\n"; return 0; } |