Pagini recente » Cod sursa (job #2632794) | Istoria paginii fmi-no-stress-2012/solutii/invazie | Istoria paginii utilizator/unibuc_barbalau_bucur_matei | Cod sursa (job #227431) | Cod sursa (job #2561058)
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long int unll;
ofstream g("secv5.out");
unll n , l, u;
unll lef , rig, ans;
unll v[1 << 20 + 5];
unordered_map<int,int> lf, rt;
char buffer[100005];
int p = 99999;
void read(unll &x)
{
while(buffer[p] < '0' || buffer[p] > '9')
{
++p;
if(p == 100000)
{
p = 0;
fread(buffer, 1, 100000, stdin);
}
}
x = 0;
while(buffer[p] >= '0' && buffer[p] <= '9')
{
x = x * 10 + buffer[p] - '0';
++p;
if(p == 100000)
{
p = 0;
fread(buffer, 1, 100000, stdin);
}
}
}
void Read()
{
freopen("secv5.in", "r", stdin);
read(n);
read(l);
read(u);
for(int i = 1;i <= n;++i)
read(v[i]);
}
void Solve()
{
lef = rig = 1;
for(int i = 1;i <= n;++i)
{
lf[v[i]]++;
rt[v[i]]++;
while(lf.size() >= l)
{
lf[v[lef]]--;
if(lf[v[lef]] == 0)
lf.erase(v[lef]);
++lef;
}
while(rt.size() > u)
{
rt[v[rig]]--;
if(rt[v[rig]] == 0)
rt.erase(v[rig]);
++rig;
}
ans += lef - rig;
}
g<<ans<<'\n';
}
int main()
{
Read();
Solve();
return 0;
}