fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5.  
  6. const int N = 1e6+5;
  7.  
  8. int n, a[N];
  9. int L[N], R[N], cnt[N];
  10.  
  11. int bit[N];
  12.  
  13. void update(int p, int v) {
  14. for (; p <= n; p += p & -p) bit[p] += v;
  15. }
  16.  
  17. int query(int p) {
  18. int s = 0;
  19. for (; p > 0; p -= p & -p) s += bit[p];
  20. return s;
  21. }
  22.  
  23. void solve() {
  24. cin >> n;
  25. vector<int> vals;
  26. for (int i = 1; i <= n; i++) {
  27. cin >> a[i];
  28. vals.push_back(a[i]);
  29. }
  30. sort(vals.begin(), vals.end());
  31. vals.erase(unique(vals.begin(), vals.end()), vals.end());
  32. for (int i = 1; i <= n; i++) a[i] = lower_bound(vals.begin(), vals.end(), a[i]) - vals.begin() + 1;
  33. for (int i = 1; i <= n; i++) L[i] = ++cnt[a[i]];
  34. fill(cnt + 1, cnt + n + 1, 0);
  35. for (int i = n; i >= 1; i--) R[i] = ++cnt[a[i]];
  36. ll ans = 0;
  37. for (int i = n; i >= 1; i--) {
  38. if (L[i] > 1) ans += query(L[i] - 1);
  39. update(R[i], 1);
  40. }
  41. cout << ans << '\n';
  42. }
  43.  
  44. int main() {
  45. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  46.  
  47. int tests = 1; // cin >> tests;
  48. while (tests--) solve();
  49.  
  50. #ifdef LOCAL
  51. cerr << "\nTime elapsed: " << clock() << " ms.\n";
  52. #endif
  53.  
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
0