Pagini recente » Cod sursa (job #435476) | Cod sursa (job #1329053) | Cod sursa (job #3122796) | Cod sursa (job #2811959) | Cod sursa (job #3297819)
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v(n);
for (int& x : v) cin >> x;
vector<int> freq(n + 2, 0); // A[i] ≤ N
unordered_set<int> used; // To track current distinct values
int left = 0;
long long result = 0;
for (int right = 0; right < n; ++right) {
freq[v[right]]++;
used.insert(v[right]);
while (freq[v[right]] > 1 && freq[1] > 1) {
freq[v[left]]--;
if (freq[v[left]] == 0) used.erase(v[left]);
left++;
}
// If no value is used more than we can reduce
// (we check for safety by making sure all values can be made distinct and ≥ 1)
while ((int)used.size() < (right - left + 1)) {
freq[v[left]]--;
if (freq[v[left]] == 0) used.erase(v[left]);
left++;
}
result += (right - left + 1);
}
cout << result << '\n';
return 0;
}