func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 1e6 + 10;   const long long mod = 1e9 + 7;   long long read() {     long long x = 0, f = 1;     char c = getchar();     while (c <  0  || c >  9 ) {       if (c ==  - ) f = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) x = (x << 1) + (x << 3) + c -  0 , c = getchar();     return x * f;   }   double ans;   struct BIT {     long long tr[N];     long long Bmax;     long long lb(long long x) { return (-x) & x; }     void init(long long n) {       Bmax = n;       for (long long i = 0; i <= n; i++) tr[i] = 0;     }     long long query(long long x) {       if (x <= 0) return 0;       long long res = 0;       while (x) {         res += tr[x];         x -= lb(x);       }       return res;     }     void update(long long x, long long w) {       if (x <= 0) return;       while (x <= Bmax) {         tr[x] += w;         x += lb(x);       }     }   } t1, t2;   int a[N];   int main() {     long long n = read();     for (int i = 1; i <= n; i++) a[i] = read();     for (long long i = 1; i <= n; i++) {       ans += (double)1.00 * i * (i - 1) / 4.00 * (n - i + 1);     }     t1.init(n);     t2.init(n);     for (long long i = 1; i <= n; i++) {       long long o1 = t1.query(n) - t1.query(a[i]);       long long o2 = t2.query(n) - t2.query(a[i]);       t1.update(a[i], 1);       t2.update(a[i], i);       ans += (double)(1.00 * n * (n + 1) * o1 * 0.5 - 1.00 * (n - i + 1) * o2);     }     printf( %.10lf , ans / (1.00 * n * (n + 1) / 2));   }   