Pagini recente » Istoria paginii utilizator/soso | Istoria paginii utilizator/energy4you | Istoria paginii utilizator/oana2598 | Cod sursa (job #2020744) | Cod sursa (job #2008604)
#include <fstream>
#include <unordered_map>
#define VAL 1050005
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int N, L, U, i, j;
int v[VAL], a[VAL];
int b[VAL], be, nr;
long long ANS;
unordered_map <int, int> H;
int main()
{
fin >> N >> L >> U;
be=1;
for (i=1; i<=N; i++)
fin >> v[i];
i=0;
while (nr<L)
{
i++;
H[v[i]]++;
if (H[v[i]]==1)
nr++;
}
H.clear();
j=nr=0;
while (nr<U)
{
j++;
H[v[j]]++;
if (H[v[j]]==1)
nr++;
}
ANS=j-i+1;
a[j]=be=1;
for (i=j+1; 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();
nr=U;
for (i=1; i<j; i++)
H[v[i]]++;
be=1;
for (i=j; i<=N; i++)
{
H[v[i]]++;
if (H[v[i]]==1 && i!=j)
nr++;
while (nr>L)
{
H[v[be]]--;
if (H[v[be]]==0)
nr--;
be++;
}
b[i]=be;
ANS+=b[i]-a[i]+1;
}
fout << ANS << '\n';
fin.close();
fout.close();
return 0;
}