AcWing 6134. 哞叫时间II
原题链接
简单
作者:
AcWing12414
,
2025-03-29 18:41:58
· 广东
,
所有人可见
,
阅读 3
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <map>
#include <set>
#include <unordered_map>
using namespace std;
typedef long long ll;
const int N = 1000010;
int n;
int a[N];
ll res;
int pre_cnt[N];
bool appear[N];
vector<vector<int>> occ(N);
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
occ[a[i]].push_back(i);
if (!appear[a[i]])
{
pre_cnt[i] = pre_cnt[i - 1] + 1;
}
else
{
pre_cnt[i] = pre_cnt[i - 1];
}
appear[a[i]] = true;
}
for (int i = 1; i <= N; i++)
{
if (occ[i].size() >= 2)
{
int pos = occ[i][occ[i].size() - 2];
if (occ[i].size() > 2)
res += pre_cnt[pos - 1] - 1;
else
res += pre_cnt[pos - 1];
}
}
cout << res;
return 0;
}