#include using namespace std; const int MAX_N = 100024; int a[MAX_N]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); freopen("negsort.in", "r", stdin); freopen("negsort.out", "w", stdout); int n, mina = INT_MAX; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; mina = min(mina, abs(a[i])); } int i = 0, ans = 0; while (fabs(a[i]) > mina) { if (a[i] > 0) { a[i] = -a[i]; ans++; } i++; } int cntPos = 0, cntNeg = 0, save = i; while(fabs(a[i]) == mina) { if (a[i] > 0) cntPos++; if (a[i] < 0) cntNeg++; i++; } int currPos = 0, currNeg = 0, bestIdx = save, bestResult = min(cntPos, cntNeg); for (int j = save; j < i; j++) { if (a[j] > 0) currPos++; else if (a[j] < 0) currNeg++; if (bestResult > (j - save + 1 - currNeg + i - j - 1 - (cntPos - currPos))) { bestResult = (j - save + 1 - currNeg + i - j - 1 - (cntPos - currPos)); bestIdx = j + 1; } } for (int j = save; j < bestIdx; j++) { if (a[j] > 0) { a[j] = -a[j]; ans++; } } if (bestIdx != save) { for (int j = bestIdx; j < i; j++) { if (a[j] < 0) { a[j] = -a[j]; ans++; } } } else { for (int j = save; j < i; j++) { if (cntPos >= cntNeg && a[j] < 0) { ans++; a[j] = -a[j]; } else if (cntPos < cntNeg && a[j] > 0) { ans++; a[j] = -a[j]; } } } while(i < n) { if (a[i] < 0) { a[i] = -a[i]; ans++; } i++; } bool f = true; for (int i = 0; i < n - 1; i++) { if (a[i] > a[i + 1]) { f = false; break; } } cout << (f ? ans : -1) << endl; return 0; }