func_code_string: #include <bits/stdc++.h>   using namespace std;   int N;   vector<pair<int, int> > v;   vector<int> query;   int ans;   struct SEG {     SEG(int l, int r, int sum) : l(l), r(r), sum(sum) {}     int l, r;     int sum;   };   vector<SEG> seg;   void init(int idx, int s, int e) {     if (s == e) return;     seg[idx].l = seg.size();     seg.push_back({-1, -1, 0});     seg[idx].r = seg.size();     seg.push_back({-1, -1, 0});     init(seg[idx].l, s, (s + e) / 2);     init(seg[idx].r, (s + e) / 2 + 1, e);   }   void update(int idx, int s, int e, int x, int y) {     seg[idx].sum += y;     if (s == e) return;     if (x <= (s + e) / 2) {       update(seg[idx].l, s, (s + e) / 2, x, y);     } else {       update(seg[idx].r, (s + e) / 2 + 1, e, x, y);     }   }   int calc(int idx, int s, int e, int x, int y) {     if (x <= s && e <= y) return seg[idx].sum;     if (x > e || y < s) return 0;     return calc(seg[idx].l, s, (s + e) / 2, x, y) +            calc(seg[idx].r, (s + e) / 2 + 1, e, x, y);   }   int main() {     seg.push_back({-1, -1, 0});     scanf( %d , &N);     init(0, 0, N - 1);     for (int i = 0; i < N; i++) {       int x;       scanf( %d , &x);       v.push_back({(x > 0) ? x : -x, i});       update(0, 0, N - 1, i, 1);     }     sort(v.begin(), v.end());     while (!v.empty()) {       pair<int, int> now = v.back();       v.pop_back();       update(0, 0, N - 1, now.second, -1);       query.push_back(now.second);       while (!v.empty() && v.back().first == now.first) {         query.push_back(v.back().second);         update(0, 0, N - 1, v.back().second, -1);         v.pop_back();       }       while (!query.empty()) {         int x = query.back();         query.pop_back();         ans += min(calc(0, 0, N - 1, 0, x - 1), calc(0, 0, N - 1, x + 1, N - 1));       }     }     printf( %d , ans);     return 0;   }   