Pagini recente » Cod sursa (job #3170584) | Cod sursa (job #1967513) | Cod sursa (job #2231187) | Cod sursa (job #2145168) | Cod sursa (job #2008615)
#include <fstream>
#include <unordered_map>
#define VAL 1050005
#define UI unsigned int
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
UI N, L, U, i, j;
UI v[VAL], a[VAL];
UI b[VAL], be, nr;
long long ANS;
unordered_map <UI, UI> H;
int main()
{
fin >> N >> L >> U;
be=1;
for (i=1; i<=N; i++)
fin >> v[i];
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;
}
fout << ANS << '\n';
fin.close();
fout.close();
return 0;
}