Problem p02732 (C++)

Buggy submission (status: Time Limit Exceeded):
/*
--------DO NOT COPY I REQUEST YOU PLEASE--------

AUTHOR : Chandan Agrawal
College : Poornima College of Engg. jaipur, Raj
Mail : chandanagrawal23@gmail.com


  ___  _   _    __    _  _  ____    __    _  _
 / __)( )_( )  /__\  ( \( )(  _ \  /__\  ( \( )
( (__  ) _ (  /(__)\  )  (  )(_) )/(__)\  )  (
 \___)(_) (_)(__)(__)(_)\_)(____/(__)(__)(_)\_)

/*

A ^ (B ^ C) % M = (A ^ y ) %  M

where y = (B ^ C)%(M-1)

//
                              \
a^(m-1) â‰¡ 1 (mod m)

If we multiply both sides with a-1, we get

a^(-1) â‰¡ a^(m-2)(mod m)

*/

#include <bits/stdc++.h>
using namespace std;
#define fastIO                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#include <cstdio>
#define MAX 7000005
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <functional>
#include <iomanip>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <string>
#include <vector>

#include <cassert>
#include <cstdlib>
#include <unordered_map>
#define ll long long
#define ld long double
#define lli long long int
#define pb push_back
#define INF 1000000000
#define mod 1000000007
#define MOD 1000000007
// #define mp make_pair
#define loop(i, n) for (lli i = 0; i < n; i++)
#define loopitr(xt, vec) for (auto xt : vec)
#define FOR(i, a, b) for (lli i = a; i < b; i += 1)
#define loop_rev(i, n) for (lli i = n - 1; i >= 0; i--)
#define FOR_REV(i, a, b) for (lli i = a; i >= b; i--)
#define all(v) v.begin(), v.end()
#define sz(x) int(x.size())
#define pii pair<int, int>
#define F first
#define S second

#define mii map<lli, lli>
#define vi vector<lli>
#define seti set<lli>

#define itr ::iterator it
#define WL(t) while (t--)
#define gcd(a, b) __gcd((a), (b))
#define lcm(a, b) (a / gcd(a, b)) * b
#define abs(x) ((x < 0) ? -(x) : x)

#define print(x) printf("%lli\n", x);
#define print2(x, y) printf("%lli %lli\n", x, y);
#define print3(x, y, z) printf("%lli %lli %lli\n", x, y, z);

#define scan(x) scanf("%lld", &x);
#define scan2(x, y) scanf("%lld %lld", &x, &y);
#define scan3(x, y, z) scanf("%lld %lld %lld", &x, &y, &z);

#define scanarr(a, n)                                                          \
  for (lli i = 0; i < n; i++)                                                  \
    cin >> a[i];
#define scanvector(a, n)                                                       \
  for (lli i = 0; i < n; i++) {                                                \
    lli x;                                                                     \
    cin >> x;                                                                  \
    a.push_back(x);                                                            \
  }

#define printarr(a, n)                                                         \
  for (lli i = 0; i < n; i++)                                                  \
    printf("%lli ", a[i]);                                                     \
  printf("\n");
#define printvector(vec)                                                       \
  for (auto xt : vec)                                                          \
    cout << xt << " ";                                                         \
  cout << "\n";
#define printset(st)                                                           \
  for (auto xt : st)                                                           \
    cout << xt << " ";                                                         \
  cout << "\n";

#define FD(N) fixed << setprecision(N)

#define endl '\n'

#define deb(x) cout << #x << " " << x << endl;

lli find_mod(string s) {
  lli i, x = 0;
  for (i = 0; i < s.length(); i++)
    x = (x * 10 + s[i] - '0') % MOD;
  return x;
}

lli prime[MAX + 1];

void sieve1() { // prime or not
  for (int i = 0; i <= MAX; i++)
    prime[i] = 1;
  prime[0] = prime[1] = 0;
  for (lli i = 4; i <= MAX; i += 2)
    prime[i] = 0;
  for (int p = 3; p * p <= MAX; p += 2) {
    if (prime[p] == 1)
      for (int i = p * 2; i <= MAX; i += p) {
        prime[i] = 0;
      }
  }
}

int min_prime_div_of_n[MAX + 1];

void sieve2() { // smallest prime factor which divide a no.
  memset(min_prime_div_of_n, 0, sizeof(min_prime_div_of_n));
  min_prime_div_of_n[0] = min_prime_div_of_n[1] = 1;
  for (int i = 2; i * i <= MAX; i++) {
    if (min_prime_div_of_n[i] == 0) {
      for (int j = i * 2; j < MAX; j += i) {
        if (min_prime_div_of_n[j] == 0) {
          min_prime_div_of_n[j] = i;
          // cout<<min_prime_div_of_n[i]<<" ";}
        }
      }
    }
  }
  for (int i = 2; i <= MAX; i++)
    if (min_prime_div_of_n[i] == 0)
      min_prime_div_of_n[i] = i;
  // If the number is prime then it's // smallest prime factor is the number //
  // itself
}

int max_prime_div_of_n[MAX + 1];

void sieve3() { // maximum prime factor which divide a no.
  sieve1();
  memset(max_prime_div_of_n, 0,
         sizeof(max_prime_div_of_n)); // 0 stands for is_prime
  max_prime_div_of_n[0] = max_prime_div_of_n[1] = 1;
  for (int i = 2; i * i <= MAX; i++) {
    if (max_prime_div_of_n[i] == 0) {
      for (int j = i * 2; j < MAX; j += i) {
        if (max_prime_div_of_n[j] == 0 || ((j % i) == 0 && prime[i] == 1)) {
          max_prime_div_of_n[j] = i;
        }
      }
    }
  }
  for (int i = 2; i <= 100; i++)
    // If the number is prime then it's largest prime factor is the number
    // itself
    if (max_prime_div_of_n[i] == 0)
      max_prime_div_of_n[i] = i;
  // cout<<max_prime_div_of_n[i]<<" ";
}

lli sum_prime_fac[1000001];

void sieve4() { // prime or not
  sum_prime_fac[1000001] = {0};
  for (lli i = 2; i <= 1000000; i++) {
    if (!sum_prime_fac[i]) {
      for (lli j = i; j <= 1000000; j += i)
        sum_prime_fac[j] += i;
    }
  }
}

bool is_even(lli n) { return (!(n & 2)); }

bool is_odd(lli n) { return (n & 2); }

/*bool isPower(lli n)
{
        // Find Log n in different bases
        // and check if the value is an
        // integer
        float f=log(n)/log(2);
        if (((f - (int)f) == 0.0) && prime[int(f)]==1)
                        return true;
        for (lli x=3; x<=sqrt(n); x+=2) {
                f = log(n) / log(x);
                if (((f - (int)f) == 0.0) && prime[int(f)]==1 && prime[x]==1 )
                        return true;
        }
        return false;
}
*/
// memset(array_name , initialized value , sizeof(data_type_of_array))
lli sum(lli n) {
  lli sum = 0;
  while (n) {
    sum += n % 10;
    n /= 10;
  }
  return sum;
}

bool isPrime(lli n) {
  if (n <= 1)
    return false;
  if (n <= 3)
    return true;
  if (n == 5)
    return true;
  if ((n % 2 == 0) || (n % 3 == 0) || (n % 5 == 0))
    return false;
  for (lli i = 5; i * i <= n; i += 6)
    if ((n % i == 0) || (n % (i + 2) == 0))
      return false;
  return true;
}

lli reversenum(lli x) {
  lli num = 0;
  while (x > 0) {
    num = num * 10 + x % 10;
    x = x / 10;
  }
  return num;
}

bool ispalindrome(string s) {
  string q = s;
  reverse(q.begin(), q.end());
  return (s == q);
}

bool isvowel(char x) {
  return (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u');
}

/*inline void fastRead(lli &x) {
            register int c = getchar_unlocked();
            x = 0;
            int neg = 0;
            for(; ((c<48 || c>57) && c != '-'); c = getchar_unlocked());
            if(c=='-'){
                neg = 1;
                c = getchar_unlocked();}
            for(; c>47 && c<58 ; c = getchar_unlocked()){x = (x<<1) + (x<<3) + c
- 48;} if(neg){ x = -x;}
}*/

lli mceil(lli a, lli b) {
  if (a % b == 0)
    return (a / b);
  else
    return (a / b + 1);
}
lli mfloor(lli a, lli b) { return (a / b); }
lli sumarr(lli a[], lli n) {
  lli sum = 0;
  loop(i, n) sum += a[i];
  return sum;
}
ll modmullong(ll a, ll b) {
  ll res = 0;
  a %= mod;
  while (b) {
    if (b & 1)
      res = (res + a) % mod;
    a = (2 * a) % mod;
    b >>= 1;
  }
  return res;
}
ll modmul(ll a, ll b) { return ((a % mod) * (b % mod)) % mod; }

ll modadd(ll a, ll b) { return ((a % mod) + (b % mod) + mod) % mod; }

ll modsub(ll a, ll b) { return ((a % mod) - (b % mod) + mod) % mod; }

lli fastexpo(lli a, lli b) {
  a = a % mod;
  lli ans = 1;
  while (b) {
    if (b & 1)
      ans = (ans * 1ll * a) % mod;
    a = (a * 1ll * a) % mod;
    b = b / 2;
  }
  return ans;
}

lli findmax(lli a[], lli x, lli y) {

  lli maxi = -1;
  for (lli i = x; i <= y; i++)
    maxi = max(maxi, a[i]);
  return maxi;
}

lli phi[MAX];
void euler_phi() { // euler totient function
  loop(i, MAX - 1) phi[i + 1] = i + 1;
  for (lli p = 2; p < MAX; p++) {
    if (phi[p] == p) {
      phi[p] = p - 1;

      for (lli i = 2 * p; i < MAX; i += p)
        phi[i] = (phi[i] / p) * (p - 1);
    }
  }
}

lli myphi(lli n) {
  lli result = n;
  for (lli p = 2; p * p <= n; ++p) {
    if (n % p == 0) {
      while (n % p == 0)
        n /= p;
      result -= result / p;
    }
  }
  if (n > 1)
    result -= result / n;
  return result;
}

void prime_factorise(lli n, map<lli, lli> &mp) {

  while (n % 2 == 0) {
    mp[2]++;
    n /= 2;
  }
  for (lli i = 3; i * i <= n; i += 2) {
    while (n % i == 0) {
      mp[i]++;
      n /= i;
    }
  }

  if (n > 1)
    mp[n]++;
}

// Returns largest power of p that divides n!
lli largestPower(lli n, lli p) {

  lli total = 0;
  // Calculate x = n/p + n/(p^2) + n/(p^3) + ....
  while (n) {
    n /= p;
    total += n;
  }
  return total;
}

lli fact[100001];
void facto() {
  fact[0] = 1;
  for (lli i = 1; i <= 100000; i++)
    fact[i] = modmul(fact[i - 1], i);
}
void finddiv(lli n, seti &st) {
  for (lli i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      st.insert(i);
      st.insert(n / i);
    }
  }
}

lli findncr(lli n, lli r) {
  if (n < r)
    return 0;
  else {
    r = min(r, n - r);
    lli a = 1, b = 1;
    for (lli i = 0; i < r; i++) {
      a = (a * (n - i)) % mod;
      b = (b * (i + 1)) % mod;
    }
    a = modmul(a, fastexpo(b, mod - 2));
    return a;
  }
}

void chandan1() { return; }
void chandan2() {
  loop(i, 10) { lli x = 1; }
  return (chandan1());
}

bool f(string s, lli se, lli e) {
  e--;
  while (se < e) {
    if (s[se] != s[e])
      return false;
    se++;
    e--;
  }
  return true;
}

int main() {
  fastIO lli t = 1;
  // cin>>t;
  while (t--) {
    lli n;
    cin >> n;
    lli a[n];
    mii mp;
    loop(i, n) {
      cin >> a[i];
      mp[a[i]]++;
    }
    mii mpu;
    lli sum = 0;
    for (auto xt : mp) {
      // cout<<xt.F<<"--\n";
      for (auto it : mp) {
        if (it.F == xt.F)
          sum += ((it.S - 1) * (it.S - 2)) / 2;
        else
          sum += ((it.S) * (it.S - 1)) / 2;
      }
      // sum=0;
      mpu[xt.F] = sum;
      sum = 0;
    }
    loop(i, n) { cout << mpu[a[i]] << "\n"; }
  }
  return 0;
}


Fixed submission:
/*
--------DO NOT COPY I REQUEST YOU PLEASE--------

AUTHOR : Chandan Agrawal
College : Poornima College of Engg. jaipur, Raj
Mail : chandanagrawal23@gmail.com


  ___  _   _    __    _  _  ____    __    _  _
 / __)( )_( )  /__\  ( \( )(  _ \  /__\  ( \( )
( (__  ) _ (  /(__)\  )  (  )(_) )/(__)\  )  (
 \___)(_) (_)(__)(__)(_)\_)(____/(__)(__)(_)\_)

/*

A ^ (B ^ C) % M = (A ^ y ) %  M

where y = (B ^ C)%(M-1)

//
                              \
a^(m-1) â‰¡ 1 (mod m)

If we multiply both sides with a-1, we get

a^(-1) â‰¡ a^(m-2)(mod m)

*/

#include <bits/stdc++.h>
using namespace std;
#define fastIO                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#include <cstdio>
#define MAX 7000005
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <functional>
#include <iomanip>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <string>
#include <vector>

#include <cassert>
#include <cstdlib>
#include <unordered_map>
#define ll long long
#define ld long double
#define lli long long int
#define pb push_back
#define INF 1000000000
#define mod 1000000007
#define MOD 1000000007
// #define mp make_pair
#define loop(i, n) for (lli i = 0; i < n; i++)
#define loopitr(xt, vec) for (auto xt : vec)
#define FOR(i, a, b) for (lli i = a; i < b; i += 1)
#define loop_rev(i, n) for (lli i = n - 1; i >= 0; i--)
#define FOR_REV(i, a, b) for (lli i = a; i >= b; i--)
#define all(v) v.begin(), v.end()
#define sz(x) int(x.size())
#define pii pair<int, int>
#define F first
#define S second

#define mii map<lli, lli>
#define vi vector<lli>
#define seti set<lli>

#define itr ::iterator it
#define WL(t) while (t--)
#define gcd(a, b) __gcd((a), (b))
#define lcm(a, b) (a / gcd(a, b)) * b
#define abs(x) ((x < 0) ? -(x) : x)

#define print(x) printf("%lli\n", x);
#define print2(x, y) printf("%lli %lli\n", x, y);
#define print3(x, y, z) printf("%lli %lli %lli\n", x, y, z);

#define scan(x) scanf("%lld", &x);
#define scan2(x, y) scanf("%lld %lld", &x, &y);
#define scan3(x, y, z) scanf("%lld %lld %lld", &x, &y, &z);

#define scanarr(a, n)                                                          \
  for (lli i = 0; i < n; i++)                                                  \
    cin >> a[i];
#define scanvector(a, n)                                                       \
  for (lli i = 0; i < n; i++) {                                                \
    lli x;                                                                     \
    cin >> x;                                                                  \
    a.push_back(x);                                                            \
  }

#define printarr(a, n)                                                         \
  for (lli i = 0; i < n; i++)                                                  \
    printf("%lli ", a[i]);                                                     \
  printf("\n");
#define printvector(vec)                                                       \
  for (auto xt : vec)                                                          \
    cout << xt << " ";                                                         \
  cout << "\n";
#define printset(st)                                                           \
  for (auto xt : st)                                                           \
    cout << xt << " ";                                                         \
  cout << "\n";

#define FD(N) fixed << setprecision(N)

#define endl '\n'

#define deb(x) cout << #x << " " << x << endl;

lli find_mod(string s) {
  lli i, x = 0;
  for (i = 0; i < s.length(); i++)
    x = (x * 10 + s[i] - '0') % MOD;
  return x;
}

lli prime[MAX + 1];

void sieve1() { // prime or not
  for (int i = 0; i <= MAX; i++)
    prime[i] = 1;
  prime[0] = prime[1] = 0;
  for (lli i = 4; i <= MAX; i += 2)
    prime[i] = 0;
  for (int p = 3; p * p <= MAX; p += 2) {
    if (prime[p] == 1)
      for (int i = p * 2; i <= MAX; i += p) {
        prime[i] = 0;
      }
  }
}

int min_prime_div_of_n[MAX + 1];

void sieve2() { // smallest prime factor which divide a no.
  memset(min_prime_div_of_n, 0, sizeof(min_prime_div_of_n));
  min_prime_div_of_n[0] = min_prime_div_of_n[1] = 1;
  for (int i = 2; i * i <= MAX; i++) {
    if (min_prime_div_of_n[i] == 0) {
      for (int j = i * 2; j < MAX; j += i) {
        if (min_prime_div_of_n[j] == 0) {
          min_prime_div_of_n[j] = i;
          // cout<<min_prime_div_of_n[i]<<" ";}
        }
      }
    }
  }
  for (int i = 2; i <= MAX; i++)
    if (min_prime_div_of_n[i] == 0)
      min_prime_div_of_n[i] = i;
  // If the number is prime then it's // smallest prime factor is the number //
  // itself
}

int max_prime_div_of_n[MAX + 1];

void sieve3() { // maximum prime factor which divide a no.
  sieve1();
  memset(max_prime_div_of_n, 0,
         sizeof(max_prime_div_of_n)); // 0 stands for is_prime
  max_prime_div_of_n[0] = max_prime_div_of_n[1] = 1;
  for (int i = 2; i * i <= MAX; i++) {
    if (max_prime_div_of_n[i] == 0) {
      for (int j = i * 2; j < MAX; j += i) {
        if (max_prime_div_of_n[j] == 0 || ((j % i) == 0 && prime[i] == 1)) {
          max_prime_div_of_n[j] = i;
        }
      }
    }
  }
  for (int i = 2; i <= 100; i++)
    // If the number is prime then it's largest prime factor is the number
    // itself
    if (max_prime_div_of_n[i] == 0)
      max_prime_div_of_n[i] = i;
  // cout<<max_prime_div_of_n[i]<<" ";
}

lli sum_prime_fac[1000001];

void sieve4() { // prime or not
  sum_prime_fac[1000001] = {0};
  for (lli i = 2; i <= 1000000; i++) {
    if (!sum_prime_fac[i]) {
      for (lli j = i; j <= 1000000; j += i)
        sum_prime_fac[j] += i;
    }
  }
}

bool is_even(lli n) { return (!(n & 2)); }

bool is_odd(lli n) { return (n & 2); }

/*bool isPower(lli n)
{
        // Find Log n in different bases
        // and check if the value is an
        // integer
        float f=log(n)/log(2);
        if (((f - (int)f) == 0.0) && prime[int(f)]==1)
                        return true;
        for (lli x=3; x<=sqrt(n); x+=2) {
                f = log(n) / log(x);
                if (((f - (int)f) == 0.0) && prime[int(f)]==1 && prime[x]==1 )
                        return true;
        }
        return false;
}
*/
// memset(array_name , initialized value , sizeof(data_type_of_array))
lli sum(lli n) {
  lli sum = 0;
  while (n) {
    sum += n % 10;
    n /= 10;
  }
  return sum;
}

bool isPrime(lli n) {
  if (n <= 1)
    return false;
  if (n <= 3)
    return true;
  if (n == 5)
    return true;
  if ((n % 2 == 0) || (n % 3 == 0) || (n % 5 == 0))
    return false;
  for (lli i = 5; i * i <= n; i += 6)
    if ((n % i == 0) || (n % (i + 2) == 0))
      return false;
  return true;
}

lli reversenum(lli x) {
  lli num = 0;
  while (x > 0) {
    num = num * 10 + x % 10;
    x = x / 10;
  }
  return num;
}

bool ispalindrome(string s) {
  string q = s;
  reverse(q.begin(), q.end());
  return (s == q);
}

bool isvowel(char x) {
  return (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u');
}

/*inline void fastRead(lli &x) {
            register int c = getchar_unlocked();
            x = 0;
            int neg = 0;
            for(; ((c<48 || c>57) && c != '-'); c = getchar_unlocked());
            if(c=='-'){
                neg = 1;
                c = getchar_unlocked();}
            for(; c>47 && c<58 ; c = getchar_unlocked()){x = (x<<1) + (x<<3) + c
- 48;} if(neg){ x = -x;}
}*/

lli mceil(lli a, lli b) {
  if (a % b == 0)
    return (a / b);
  else
    return (a / b + 1);
}
lli mfloor(lli a, lli b) { return (a / b); }
lli sumarr(lli a[], lli n) {
  lli sum = 0;
  loop(i, n) sum += a[i];
  return sum;
}
ll modmullong(ll a, ll b) {
  ll res = 0;
  a %= mod;
  while (b) {
    if (b & 1)
      res = (res + a) % mod;
    a = (2 * a) % mod;
    b >>= 1;
  }
  return res;
}
ll modmul(ll a, ll b) { return ((a % mod) * (b % mod)) % mod; }

ll modadd(ll a, ll b) { return ((a % mod) + (b % mod) + mod) % mod; }

ll modsub(ll a, ll b) { return ((a % mod) - (b % mod) + mod) % mod; }

lli fastexpo(lli a, lli b) {
  a = a % mod;
  lli ans = 1;
  while (b) {
    if (b & 1)
      ans = (ans * 1ll * a) % mod;
    a = (a * 1ll * a) % mod;
    b = b / 2;
  }
  return ans;
}

lli findmax(lli a[], lli x, lli y) {

  lli maxi = -1;
  for (lli i = x; i <= y; i++)
    maxi = max(maxi, a[i]);
  return maxi;
}

lli phi[MAX];
void euler_phi() { // euler totient function
  loop(i, MAX - 1) phi[i + 1] = i + 1;
  for (lli p = 2; p < MAX; p++) {
    if (phi[p] == p) {
      phi[p] = p - 1;

      for (lli i = 2 * p; i < MAX; i += p)
        phi[i] = (phi[i] / p) * (p - 1);
    }
  }
}

lli myphi(lli n) {
  lli result = n;
  for (lli p = 2; p * p <= n; ++p) {
    if (n % p == 0) {
      while (n % p == 0)
        n /= p;
      result -= result / p;
    }
  }
  if (n > 1)
    result -= result / n;
  return result;
}

void prime_factorise(lli n, map<lli, lli> &mp) {

  while (n % 2 == 0) {
    mp[2]++;
    n /= 2;
  }
  for (lli i = 3; i * i <= n; i += 2) {
    while (n % i == 0) {
      mp[i]++;
      n /= i;
    }
  }

  if (n > 1)
    mp[n]++;
}

// Returns largest power of p that divides n!
lli largestPower(lli n, lli p) {

  lli total = 0;
  // Calculate x = n/p + n/(p^2) + n/(p^3) + ....
  while (n) {
    n /= p;
    total += n;
  }
  return total;
}

lli fact[100001];
void facto() {
  fact[0] = 1;
  for (lli i = 1; i <= 100000; i++)
    fact[i] = modmul(fact[i - 1], i);
}
void finddiv(lli n, seti &st) {
  for (lli i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      st.insert(i);
      st.insert(n / i);
    }
  }
}

lli findncr(lli n, lli r) {
  if (n < r)
    return 0;
  else {
    r = min(r, n - r);
    lli a = 1, b = 1;
    for (lli i = 0; i < r; i++) {
      a = (a * (n - i)) % mod;
      b = (b * (i + 1)) % mod;
    }
    a = modmul(a, fastexpo(b, mod - 2));
    return a;
  }
}

void chandan1() { return; }
void chandan2() {
  loop(i, 10) { lli x = 1; }
  return (chandan1());
}

bool f(string s, lli se, lli e) {
  e--;
  while (se < e) {
    if (s[se] != s[e])
      return false;
    se++;
    e--;
  }
  return true;
}

int main() {
  fastIO lli t = 1;
  // cin>>t;
  while (t--) {
    lli n;
    cin >> n;
    lli a[n];
    mii mp;
    loop(i, n) {
      cin >> a[i];
      mp[a[i]]++;
    }
    mii mpu;
    lli sum = 0;
    for (auto it : mp) {
      sum += ((it.S) * (it.S - 1)) / 2;
      // cout<<it.S<<endl;
    }
    // cout<<endl<<sum<<"\n\n";
    loop(i, n) {
      // cout<<mp[a[i]]<<" ";
      cout << sum + 1 - mp[a[i]] << "\n";
    }
  }
  return 0;
}