func_code_string: #include <bits/stdc++.h>   using namespace std;   long long Seg[3][1 << 21 + 2], X, Cnt = 1;   pair<long long, int> P[1000001];   int l_q, r_q, Len;   long long RSQ(int l, int r, int root) {     if (l > r_q || l_q > r || l > r) return 0;     if (l >= l_q && r <= r_q) return Seg[Len][root];     int mid = (r + l) / 2;     long long C1 = RSQ(l, mid, root * 2);     long long C2 = RSQ(mid + 1, r, root * 2 + 1);     return C1 + C2;   }   void Update(int l, int r, int root) {     if (l > r_q || l_q > r || l > r) return;     if (l >= l_q && r <= r_q) {       Seg[Len][root] += X;       return;     }     int mid = (r + l) / 2;     Update(l, mid, root * 2);     Update(mid + 1, r, root * 2 + 1);     Seg[Len][root] = Seg[Len][root * 2] + Seg[Len][root * 2 + 1];   }   int main() {     int n;     cin >> n;     for (int i = 0; i < n; i++) cin >> P[i].first, P[i].second = i;     sort(P, P + n);     for (int i = 0; i < n; i++) {       P[P[i].second].first = Cnt++;     }     reverse(P, P + n);     for (int i = 0; i < n; i++) {       for (int L = 0; L < 3; L++) {         l_q = 1;         r_q = P[i].first - 1;         Len = L - 1;         long long val;         if (L == 0)           val = 1;         else           val = RSQ(1, n, 1);         l_q = r_q = P[i].first;         Len = L;         X = val;         Update(1, n, 1);       }     }     cout << Seg[2][1] << endl;     return 0;   }   