Pagini recente » Cod sursa (job #2361839) | Cod sursa (job #1984064) | Profil Asgari_Armin | Cod sursa (job #2477084) | Cod sursa (job #1766073)
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
#define f first
#define s second
#define prim 666667
#define nmax 1100000
vector < pair <long long,long long> > h[prim];
long long v[nmax];
long long d[nmax];
long long fr[nmax];
long long n,k,i,l,u,x,number,nr,ans;
void push(long long x,long long k)
{
h[x%prim].push_back(make_pair(x,k));
}
long long exists(long long x)
{
long long mod = x %prim;
for(long long i=0; i<h[mod].size(); ++i)
if(h[mod][i].f==x)
return h[mod][i].s;
return -1;
}
int main()
{
fin>>n>>l>>u;
for(i=1; i<=n; ++i)
{
fin>>x;
number = exists(x);
if(number > 0)
{
v[i]=number;
}
else
{
++k;
push(x,k);
v[i]=k;
}
}
long long s=1;
for(i=1; i<=n; ++i)
{
fr[v[i]]++;
if(fr[v[i]]==1)
{
++nr;
while(nr>l-1)
{
fr[v[s]]--;
if(fr[v[s]]==0)
--nr;
++s;
}
}
d[i]=s;
}
s=1;
nr=0;
for(i=1; i<=n; ++i)
{
fr[v[i]]++;
if(fr[v[i]]==1)
{
++nr;
while(nr>u)
{
fr[v[s]]--;
if(fr[v[s]]==0)
--nr;
++s;
}
}
ans+=(d[i]-s);
}
fout<<ans;
}