#include <bits/stdc++.h> // Adam Naskręcki using namespace std; typedef long long ll; int pos(int k, int *b); int neg(int k, int *b); int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int a[n], b[n]; for (int i = 0; i < n; i++) { cin >> a[i]; if (i > 0) { b[i] = a[i] - a[i - 1]; } } int res = min(neg(n - 1, b), pos(n - 1, b)); cout << res << "\n"; return 0; } int pos(int k, int *b) { if (k > 2) { return (b[k] > 0) ? neg(k - 1, b) : (pos(k - 2, b) + 1); } if (k == 1) { return (b[1] > 0) ? 0 : 1; } return (b[1] < 0 && 0 < b[2]) ? 0 : 1; } int neg(int k, int *b) { if (k > 2) { return (b[k] < 0) ? pos(k - 1, b) : (neg(k - 2, b) + 1); } if (k == 1) { return (b[1] < 0) ? 0 : 1; } return (b[1] > 0 && 0 > b[2]) ? 0 : 1; }
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 | #include <bits/stdc++.h> // Adam Naskręcki using namespace std; typedef long long ll; int pos(int k, int *b); int neg(int k, int *b); int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int a[n], b[n]; for (int i = 0; i < n; i++) { cin >> a[i]; if (i > 0) { b[i] = a[i] - a[i - 1]; } } int res = min(neg(n - 1, b), pos(n - 1, b)); cout << res << "\n"; return 0; } int pos(int k, int *b) { if (k > 2) { return (b[k] > 0) ? neg(k - 1, b) : (pos(k - 2, b) + 1); } if (k == 1) { return (b[1] > 0) ? 0 : 1; } return (b[1] < 0 && 0 < b[2]) ? 0 : 1; } int neg(int k, int *b) { if (k > 2) { return (b[k] < 0) ? pos(k - 1, b) : (neg(k - 2, b) + 1); } if (k == 1) { return (b[1] < 0) ? 0 : 1; } return (b[1] > 0 && 0 > b[2]) ? 0 : 1; } |