func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = int(3e5), mod = int(1e9) + 7;   int n;   int a[N], c[N];   long long t[N];   long long x[N], pref[N];   long double p[N];   long long suf[N];   void upd(int v, int val) {     v += n - 1;     t[v] += val;     c[v]++;     while (v > 1) {       v >>= 1;       t[v] = t[v + v] + t[v + v + 1];       c[v] = c[v + v] + c[v + v + 1];     }   }   long long get(int l, int r) {     l += n - 1;     r += n - 1;     long long res = 0;     while (l <= r) {       if (l & 1) res += t[l];       if (!(r & 1)) res += t[r];       l = (l + 1) >> 1;       r = (r - 1) >> 1;     }     return res;   }   int cnt(int l, int r) {     l += n - 1;     r += n - 1;     int res = 0;     while (l <= r) {       if (l & 1) res += c[l];       if (!(r & 1)) res += c[r];       l = (l + 1) >> 1;       r = (r - 1) >> 1;     }     return res;   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %d , &a[i]);     }     long long all = 1ll * n * (n + 1) / 2;     long double res = 0;     for (int i = 1; i <= n; i++) {       long long cur = get(1, a[i] - 1);       long double p = (cur + 0.0) * (n - i + 1) / all;       res += p * 0.5;       cur = get(a[i] + 1, n);       p = (cur + 0.0) * (n - i + 1) / all;       res += cnt(a[i] + 1, n);       res -= p * 0.5;       upd(a[i], i);     }     printf( %.12lf , double(res));     return 0;   }   