Pagini recente » Cod sursa (job #174735) | Cod sursa (job #3282221) | Cod sursa (job #3258742) | Cod sursa (job #175259) | Cod sursa (job #2885057)
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
int n, l, u;
unordered_map<unsigned int, unsigned int> mp_u;
unordered_map<unsigned int, unsigned int> mp_l;
unordered_map<unsigned int, unsigned int> elem;
int main()
{
unsigned int x;
in >> n >> l >> u;
unsigned long long int calcul_u = 0;
unsigned long long int calcul_l = 0;
unsigned long long int j = 1;
unsigned long long int k = 1;
for ( unsigned long long int i=1; i<=n; i++) {
in >> x;
elem[i] = x;
mp_u[x] ++;
if (mp_u.size() > u) {
while (mp_u.size() > u) {
mp_u[elem[j]]--;
if (mp_u[elem[j]] == 0) {
mp_u.erase(elem[j]);
}
j++;
}
}
calcul_u += (i - j + 1);
mp_l[x] ++;
if (mp_l.size() >= l) {
while (mp_l.size() >= l) {
mp_l[elem[k]]--;
if (mp_l[elem[k]] == 0) {
mp_l.erase(elem[k]);
}
k++;
}
}
calcul_l += (i - k + 1);
}
out << calcul_u - calcul_l;
return 0;
}