Pagini recente » Cod sursa (job #1630979) | Cod sursa (job #1155372) | Cod sursa (job #864841) | Cod sursa (job #2255449) | Cod sursa (job #1674231)
#include <cstdio>
#include <iostream>
#include <unordered_set>
using namespace std;
unordered_multiset<unsigned> s1;
unordered_multiset<unsigned> s2;
unsigned v[2000000];
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
int n, l, u;
scanf("%d%d%d", &n, &l, &u);
int l1 = 1;
int l2 = 1;
int nr1 = 0, nr2 = 0;
long long sol = 0;
for (int i = 1; i <= n; i++)
{
scanf("%u", &v[i]);
if (s1.find(v[i]) == s1.end())
nr1++;
if (s2.find(v[i]) == s2.end())
nr2++;
if (nr1 > u)
{
for (; l1 <= n; l1++)
{
s1.erase(s1.find(v[l1]));
if (s1.find(v[l1]) == s1.end())
break;
}
l1++;
nr1--;
}
if (nr2 > l)
{
for (; l2 <= n; l2++)
{
s2.erase(s2.find(v[l2]));
if (s2.find(v[l2]) == s2.end())
break;
}
l2++;
nr2--;
}
s1.insert(v[i]);
s2.insert(v[i]);
while (s2.count(v[l2]) > 1 && l2 < i)
{
s2.erase(s2.find(v[l2]));
l2++;
}
if (nr1 >= l)
sol += (l2 - l1 + 1);
}
cout << sol << '\n';
return 0;
}