func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long int logx = 30;   const long long int N = 1e6 + 5;   const long long int INF = 1e18 + 5;   const long long int mod = 321555123;   const double PI = 3.14159265358979323846;   inline long long int mul(long long int a, long long int b) {     return (a * 1ll * b) % mod;   }   inline long long int sub(long long int a, long long int b) {     long long int c = a - b;     if (c < 0) c += mod;     return c;   }   inline long long int add(long long int a, long long int b) {     long long int c = a + b;     if (c > mod) c -= mod;     return c;   }   template <typename T>   T power(T x, T y, long long int m) {     T ans = 1;     while (y > 0) {       if (y & 1LL) ans = (ans * x) % m;       y >>= 1ll;       x = (x * x) % m;     }     return ans % m;   }   vector<long long int> bit[N];   long long int n, q, a[N], b[N];   void Update(long long int idx, long long int val) {     idx++;     while (idx <= n) {       bit[idx].push_back(val);       idx += (idx & -idx);     }   }   long long int Query(long long int idx, long long int val) {     long long int sum = 0;     idx++;     while (idx > 0) {       long long int lb =           lower_bound(bit[idx].begin(), bit[idx].end(), val) - bit[idx].begin();       sum += lb;       idx -= (idx & -idx);     }     return sum;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     ;     cin >> n;     long long int sum = 0;     map<long long int, long long int> first;     for (long long int i = 0; i < n; i++) {       cin >> a[i];     }     for (long long int i = n - 1; i >= 0; i--) {       first[a[i]]++;       b[i] = first[a[i]];     }     for (long long int i = 0; i < n; i++) {       Update(i, b[i]);     }     for (long long int i = 1; i <= n + 1; i++) {       sort(bit[i].begin(), bit[i].end());     }     first.clear();     for (long long int i = 0; i < n; i++) {       long long int l = i + 1;       long long int r = n - 1;       first[a[i]]++;       sum += Query(r, first[a[i]]) - Query(l - 1, first[a[i]]);     }     cout << sum << endl;   }   