#include <cmath>
#include <iostream>
#include <map>
using
namespace
std;
void
findSum(
int
arr[],
int
n)
{
map<
int
, pair<
int
,
int
> > map;
int
left[n], right[n];
for
(
int
i = 0; i < n; i++) {
if
(map.count(arr[i]) == 0) {
left[i] = 0;
map[arr[i]] = make_pair(1, i);
}
else
{
pair<
int
,
int
> tmp = map[arr[i]];
left[i] = (tmp.first) * (i - tmp.second)
+ left[tmp.second];
map[arr[i]] = make_pair(tmp.first + 1, i);
}
}
map.clear();
for
(
int
i = n - 1; i >= 0; i--) {
if
(map.count(arr[i]) == 0) {
right[i] = 0;
map[arr[i]] = make_pair(1, i);
}
else
{
pair<
int
,
int
> tmp = map[arr[i]];
right[i] = (tmp.first) * (
abs
(i - tmp.second))
+ right[tmp.second];
map[arr[i]] = make_pair(tmp.first + 1, i);
}
}
for
(
int
i = 0; i < n; i++)
cout << left[i] + right[i] <<
" "
;
}
int
main()
{
int
arr[] = { 1, 3, 1, 1, 2 };
int
N =
sizeof
(arr) /
sizeof
(arr[0]);
findSum(arr, N);
return
0;
}