In this HackerEarth Multiple occurrences numbers, problem-solution you are given an integer array A. Your task is to calculate the sum of absolute difference of indices of first and last occurrence for every integer that is present in array A.

Formally, if element x occurs m times in the array at indices B1, B2, B3, ..., Bm, then the answer for x will be Bm - B1 if array B is sorted. You are required to calculate the sum of the answer for every such x that occurs in the array.

hackerEarth Multiple occurrences problem solution


HackerEarth Multiple occurrences problem solution.

#include<bits/stdc++.h>
using namespace std;
#define FIO ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define mod 1000000007
#define endl "\n"
#define test ll t; cin>>t; while(t--)
typedef long long int ll;
int main() {
    FIO;
    test
    {
      ll n,ans=0;
      cin>>n;
      vector<ll>a(n);
      for(auto &it:a) cin>>it;
      map<ll,ll>mp;
      for(ll i=0;i<n;i++){
          if(mp.find(a[i])!=mp.end()){
              ans+=(i-mp[a[i]]);
          }
          mp[a[i]]=i;
      }
      cout<<ans<<endl;
    }
	return 0;
}

second solution

MAX = 10000
t = int(input())
while t > 0:
    t -= 1
    n = int(input())
    have = {}
    a = list(map(int, input().split()))
    for i in range(n):
        if a[i] not in have:
            have[a[i]] = []
        have[a[i]] += [i]
    ans = 0
    for key, occ in have.items():
        ans += occ[-1] - occ[0]
    print(ans)