#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
struct Segment_Tree
{
struct Node
{
int l, r;
ll sum, lazy, sum_mul;
Node(int l = 0, int r = 0, ll sum = 0, ll lazy = 0, ll sum_mul = 0) :
sum(sum), lazy(lazy), sum_mul(sum_mul) {};
bool operator == (const Node &other) const
{
return sum == other.sum && lazy == other.lazy && sum_mul == other.sum_mul;
}
};
int n;
vector<Node> tree;
Node nll;
Segment_Tree(int n = 0) : n(n)
{
nll = Node(-1e9, -1e9, -1e18, -1e18, -1e18);
tree.assign(4 * n + 10, Node(0, 0, 0, 0, 0));
}
void update_node(Node &a, int l, int r, ll val)
{
ll len = r - l + 1;
a.l = l;
a.r = r;
a.sum += len * val;
a.lazy += val;
a.sum_mul += (len + 1) * len / 2 * val;
}
void push(int id, int l, int r)
{
if (tree[id].lazy == 0)
return ;
int m = l + r >> 1;
update_node(tree[id << 1], l, m, tree[id].lazy);
update_node(tree[id << 1 | 1], m + 1, r, tree[id].lazy);
tree[id].lazy = 0;
}
Node merge_node(Node a, Node b, int l, int r)
{
if (a == nll)
return b;
if (b == nll)
return a;
Node ans;
ans.sum = a.sum + b.sum;
ans.lazy = 0;
ans.sum_mul = a.sum_mul + (b.r - b.l + 1) * a.sum + b.sum_mul;
ans.l = a.l;
ans.r = b.r;
return ans;
}
void update(int id, int l, int r, int u, int v, ll val)
{
if (r < u || l > v)
return ;
if (u <= l && r <= v)
{
update_node(tree[id], l, r, val);
return ;
}
int m = l + r >> 1;
push(id, l, r);
update(id << 1, l, m, u, v, val);
update(id << 1 | 1, m + 1, r, u, v, val);
tree[id] = merge_node(tree[id << 1], tree[id << 1 | 1], l, r);
}
Node get(int id, int l, int r, int u, int v)
{
if (r < u || l > v)
return nll;
if (u <= l && r <= v)
{
// cout << l << ' ' << r << ' ' << tree[id].sum << ' ' << tree[id].sum_mul, el;
return tree[id];
}
int m = l + r >> 1;
push(id, l, r);
Node a = get(id << 1, l, m, u, v);
Node b = get(id << 1 | 1, m + 1, r, u, v);
return merge_node(a, b, l, r);
}
void update(int l, int r, ll val)
{
if (r < l)
return ;
update(1, 1, n, l, r, val);
}
Node get(int l, int r)
{
if (r < l)
return Node(0, 0, 0);
return get(1, 1, n, l, r);
}
};
const int maxn = 2e5;
int n, a[maxn + 10];
ll ans = 0;
vector<int> v, pos[maxn + 10];
Segment_Tree st;
int get_id(int x)
{
return lower_bound(v.begin(), v.end(), x) - v.begin() + 1;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("VBAUCU.INP", "r"))
{
freopen("VBAUCU.INP", "r", stdin);
freopen("VBAUCU.OUT", "w", stdout);
}
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
v.push_back(a[i]);
}
sort(v.begin(), v.end());
v.resize(unique(v.begin(), v.end()) - v.begin());
for (int i = 1; i <= n; i++)
{
a[i] = get_id(a[i]);
if (pos[a[i]].size() == 0)
pos[a[i]].push_back(1);
pos[a[i]].push_back(i);
}
st = Segment_Tree(2 * n + 2);
st.update(n + 1, n + 1, 1);
for (int i = 1; i <= v.size(); i++)
{
// cout << i, el;
pos[i].push_back(n + 1);
for (int j = 1; j < pos[i].size(); j++)
{
int pre_l = -pos[i][j - 1] + 2 * (j - 1) + n + 1;
int pre_r = -(pos[i][j] - 1) + 2 * (j - 1) + n + 1;
int len = pos[i][j] - pos[i][j - 1];
if (pos[i][j - 1] > pos[i][j] - 1)
continue;
int x = st.get(1, pre_r - 1).sum * len + st.get(pre_r, pre_l - 1).sum_mul;
ans += x;
// cout << pos[i][j - 1] << ' ' << pos[i][j] - 1 << ' ' << pre_l << ' ' << pre_r << ' ' << x, el;
st.update(pre_r, pre_l, 1);
}
// cout << ans, el;
for (int j = 1; j < pos[i].size(); j++)
{
ll pre_l = -pos[i][j - 1] + 2 * (j - 1) + n + 1;
ll pre_r = -(pos[i][j] - 1) + 2 * (j - 1) + n + 1;
if (pos[i][j - 1] > pos[i][j] - 1)
continue;
st.update(pre_r, pre_l, -1);
}
}
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBTZWdtZW50X1RyZWUKewogICAgc3RydWN0IE5vZGUKICAgIHsKICAgICAgICBpbnQgbCwgcjsKICAgICAgICBsbCBzdW0sIGxhenksIHN1bV9tdWw7CgogICAgICAgIE5vZGUoaW50IGwgPSAwLCBpbnQgciA9IDAsIGxsIHN1bSA9IDAsIGxsIGxhenkgPSAwLCBsbCBzdW1fbXVsID0gMCkgOgogICAgICAgICAgICBzdW0oc3VtKSwgbGF6eShsYXp5KSwgc3VtX211bChzdW1fbXVsKSB7fTsKICAgICAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBOb2RlICZvdGhlcikgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBzdW0gPT0gb3RoZXIuc3VtICYmIGxhenkgPT0gb3RoZXIubGF6eSAmJiBzdW1fbXVsID09IG90aGVyLnN1bV9tdWw7CiAgICAgICAgfQogICAgfTsKCiAgICBpbnQgbjsKICAgIHZlY3RvcjxOb2RlPiB0cmVlOwogICAgTm9kZSBubGw7CgogICAgU2VnbWVudF9UcmVlKGludCBuID0gMCkgOiBuKG4pCiAgICB7CiAgICAgICAgbmxsID0gTm9kZSgtMWU5LCAtMWU5LCAtMWUxOCwgLTFlMTgsIC0xZTE4KTsKICAgICAgICB0cmVlLmFzc2lnbig0ICogbiArIDEwLCBOb2RlKDAsIDAsIDAsIDAsIDApKTsKICAgIH0KICAgIHZvaWQgdXBkYXRlX25vZGUoTm9kZSAmYSwgaW50IGwsIGludCByLCBsbCB2YWwpCiAgICB7CiAgICAgICAgbGwgbGVuID0gciAtIGwgKyAxOwogICAgICAgIGEubCA9IGw7CiAgICAgICAgYS5yID0gcjsKICAgICAgICBhLnN1bSArPSBsZW4gKiB2YWw7CiAgICAgICAgYS5sYXp5ICs9IHZhbDsKICAgICAgICBhLnN1bV9tdWwgKz0gKGxlbiArIDEpICogbGVuIC8gMiAqIHZhbDsKICAgIH0KICAgIHZvaWQgcHVzaChpbnQgaWQsIGludCBsLCBpbnQgcikKICAgIHsKICAgICAgICBpZiAodHJlZVtpZF0ubGF6eSA9PSAwKQogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgICAgICB1cGRhdGVfbm9kZSh0cmVlW2lkIDw8IDFdLCBsLCBtLCB0cmVlW2lkXS5sYXp5KTsKICAgICAgICB1cGRhdGVfbm9kZSh0cmVlW2lkIDw8IDEgfCAxXSwgbSArIDEsIHIsIHRyZWVbaWRdLmxhenkpOwogICAgICAgIHRyZWVbaWRdLmxhenkgPSAwOwogICAgfQogICAgTm9kZSBtZXJnZV9ub2RlKE5vZGUgYSwgTm9kZSBiLCBpbnQgbCwgaW50IHIpCiAgICB7CiAgICAgICAgaWYgKGEgPT0gbmxsKQogICAgICAgICAgICByZXR1cm4gYjsKICAgICAgICBpZiAoYiA9PSBubGwpCiAgICAgICAgICAgIHJldHVybiBhOwogICAgICAgIE5vZGUgYW5zOwogICAgICAgIGFucy5zdW0gPSBhLnN1bSArIGIuc3VtOwogICAgICAgIGFucy5sYXp5ID0gMDsKICAgICAgICBhbnMuc3VtX211bCA9IGEuc3VtX211bCArIChiLnIgLSBiLmwgKyAxKSAqIGEuc3VtICsgYi5zdW1fbXVsOwogICAgICAgIGFucy5sID0gYS5sOwogICAgICAgIGFucy5yID0gYi5yOwogICAgICAgIHJldHVybiBhbnM7CiAgICB9CiAgICB2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2LCBsbCB2YWwpCiAgICB7CiAgICAgICAgaWYgKHIgPCB1IHx8IGwgPiB2KQogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIGlmICh1IDw9IGwgJiYgciA8PSB2KQogICAgICAgIHsKICAgICAgICAgICAgdXBkYXRlX25vZGUodHJlZVtpZF0sIGwsIHIsIHZhbCk7CiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgfQogICAgICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgICAgICBwdXNoKGlkLCBsLCByKTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSwgbCwgbSwgdSwgdiwgdmFsKTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSB8IDEsIG0gKyAxLCByLCB1LCB2LCB2YWwpOwogICAgICAgIHRyZWVbaWRdID0gbWVyZ2Vfbm9kZSh0cmVlW2lkIDw8IDFdLCB0cmVlW2lkIDw8IDEgfCAxXSwgbCwgcik7CiAgICB9CiAgICBOb2RlIGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KQogICAgewogICAgICAgIGlmIChyIDwgdSB8fCBsID4gdikKICAgICAgICAgICAgcmV0dXJuIG5sbDsKICAgICAgICBpZiAodSA8PSBsICYmIHIgPD0gdikKICAgICAgICB7Ci8vICAgICAgICAgICAgY291dCA8PCBsIDw8ICcgJyA8PCByIDw8ICcgJyA8PCB0cmVlW2lkXS5zdW0gPDwgJyAnIDw8IHRyZWVbaWRdLnN1bV9tdWwsIGVsOwogICAgICAgICAgICByZXR1cm4gdHJlZVtpZF07CiAgICAgICAgfQogICAgICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgICAgICBwdXNoKGlkLCBsLCByKTsKICAgICAgICBOb2RlIGEgPSBnZXQoaWQgPDwgMSwgbCwgbSwgdSwgdik7CiAgICAgICAgTm9kZSBiID0gZ2V0KGlkIDw8IDEgfCAxLCBtICsgMSwgciwgdSwgdik7CiAgICAgICAgIHJldHVybiBtZXJnZV9ub2RlKGEsIGIsIGwsIHIpOwogICAgfQogICAgdm9pZCB1cGRhdGUoaW50IGwsIGludCByLCBsbCB2YWwpCiAgICB7CiAgICAgICAgaWYgKHIgPCBsKQogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIHVwZGF0ZSgxLCAxLCBuLCBsLCByLCB2YWwpOwogICAgfQogICAgTm9kZSBnZXQoaW50IGwsIGludCByKQogICAgewogICAgICAgIGlmIChyIDwgbCkKICAgICAgICAgICAgcmV0dXJuIE5vZGUoMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGdldCgxLCAxLCBuLCBsLCByKTsKICAgIH0KfTsKCmNvbnN0IGludCBtYXhuID0gMmU1OwoKaW50IG4sIGFbbWF4biArIDEwXTsKbGwgYW5zID0gMDsKdmVjdG9yPGludD4gdiwgcG9zW21heG4gKyAxMF07ClNlZ21lbnRfVHJlZSBzdDsKCmludCBnZXRfaWQoaW50IHgpCnsKICAgIHJldHVybiBsb3dlcl9ib3VuZCh2LmJlZ2luKCksIHYuZW5kKCksIHgpIC0gdi5iZWdpbigpICsgMTsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbigiVkJBVUNVLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiVkJBVUNVLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIlZCQVVDVS5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG47CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgdi5wdXNoX2JhY2soYVtpXSk7CiAgICB9CiAgICBzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSk7CiAgICB2LnJlc2l6ZSh1bmlxdWUodi5iZWdpbigpLCB2LmVuZCgpKSAtIHYuYmVnaW4oKSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgYVtpXSA9IGdldF9pZChhW2ldKTsKICAgICAgICBpZiAocG9zW2FbaV1dLnNpemUoKSA9PSAwKQogICAgICAgICAgICBwb3NbYVtpXV0ucHVzaF9iYWNrKDEpOwogICAgICAgIHBvc1thW2ldXS5wdXNoX2JhY2soaSk7CiAgICB9CiAgICBzdCA9IFNlZ21lbnRfVHJlZSgyICogbiArIDIpOwogICAgc3QudXBkYXRlKG4gKyAxLCBuICsgMSwgMSk7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gdi5zaXplKCk7IGkrKykKICAgIHsKLy8gICAgICAgIGNvdXQgPDwgaSwgZWw7CiAgICAgICAgcG9zW2ldLnB1c2hfYmFjayhuICsgMSk7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBwb3NbaV0uc2l6ZSgpOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgcHJlX2wgPSAtcG9zW2ldW2ogLSAxXSArIDIgKiAoaiAtIDEpICsgbiArIDE7CiAgICAgICAgICAgIGludCBwcmVfciA9IC0ocG9zW2ldW2pdIC0gMSkgKyAyICogKGogLSAxKSArIG4gKyAxOwogICAgICAgICAgICBpbnQgbGVuID0gcG9zW2ldW2pdIC0gcG9zW2ldW2ogLSAxXTsKICAgICAgICAgICAgaWYgKHBvc1tpXVtqIC0gMV0gPiBwb3NbaV1bal0gLSAxKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGludCB4ID0gc3QuZ2V0KDEsIHByZV9yIC0gMSkuc3VtICogbGVuICsgc3QuZ2V0KHByZV9yLCBwcmVfbCAtIDEpLnN1bV9tdWw7CiAgICAgICAgICAgIGFucyArPSB4OwovLyAgICAgICAgICAgIGNvdXQgPDwgcG9zW2ldW2ogLSAxXSA8PCAnICcgPDwgcG9zW2ldW2pdIC0gMSA8PCAnICcgPDwgcHJlX2wgPDwgJyAnIDw8IHByZV9yIDw8ICcgJyA8PCB4LCBlbDsKICAgICAgICAgICAgc3QudXBkYXRlKHByZV9yLCBwcmVfbCwgMSk7CiAgICAgICAgfQovLyAgICAgICAgY291dCA8PCBhbnMsIGVsOwogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgcG9zW2ldLnNpemUoKTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgbGwgcHJlX2wgPSAtcG9zW2ldW2ogLSAxXSArIDIgKiAoaiAtIDEpICsgbiArIDE7CiAgICAgICAgICAgIGxsIHByZV9yID0gLShwb3NbaV1bal0gLSAxKSArIDIgKiAoaiAtIDEpICsgbiArIDE7CgogICAgICAgICAgICBpZiAocG9zW2ldW2ogLSAxXSA+IHBvc1tpXVtqXSAtIDEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgc3QudXBkYXRlKHByZV9yLCBwcmVfbCwgLTEpOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgYW5zOwp9Cg==