Pagini recente » Cod sursa (job #605046) | Cod sursa (job #2200515) | Profil gombos_raul10 | Cod sursa (job #892208) | Cod sursa (job #2008617)
#include <fstream>
#include <cstdio>
#include <unordered_map>
#define VAL 1050005
#define UI unsigned int
using namespace std;
UI N, L, U, i, j;
UI v[VAL], a[VAL];
UI b[VAL], be, nr;
long long ANS;
unordered_map <UI, UI> H;
char buff[VAL];
UI poz=0;
UI citeste()
{
UI nr=0;
while (buff[poz]<'0' || buff[poz]>'9')
if (++poz==VAL)
fread(buff, 1, VAL, stdin), poz=0;
while ('0'<=buff[poz] && buff[poz]<='9')
{
nr=nr*10+buff[poz]-'0';
if (++poz==VAL)
fread(buff, 1, VAL, stdin), poz=0;
}
return nr;
}
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
N=citeste();
L=citeste();
U=citeste();
be=1;
for (i=1; i<=N; i++)
v[i]=citeste();
i=0;
while (nr<U)
{
i++;
if (i>N)
break;
H[v[i]]++;
if (H[v[i]]==1)
nr++;
}
a[i]=1;
be=1;
while (i<N)
{
i++;
H[v[i]]++;
if (H[v[i]]==1)
nr++;
while (nr>U)
{
H[v[be]]--;
if (H[v[be]]==0)
nr--;
be++;
}
a[i]=be;
}
H.clear();
i=0;
nr=0;
while (nr<L)
{
i++;
if (i>N)
break;
H[v[i]]++;
if (H[v[i]]==1)
nr++;
}
be=1;
for (j=i; j<=N; j++)
{
while (nr>=L)
{
H[v[be]]--;
if (H[v[be]]==0)
nr--;
be++;
}
be--;
nr++;
H[v[be]]++;
b[j]=be;
H[v[j+1]]++;
if (H[v[j+1]]==1)
nr++;
}
for (i=1; i<=N; i++)
{
if (a[i]==0 && b[i]>0)
ANS+=b[i];
if (a[i]>0 && b[i]>0)
ANS+=b[i]-a[i]+1;
}
printf("%lld\n", ANS);
return 0;
}