Pagini recente » Cod sursa (job #2613728) | Cod sursa (job #804635) | Cod sursa (job #1817941) | Cod sursa (job #925865) | Cod sursa (job #1784618)
#include <cstdio>
#include <vector>
#define MOD 666013
#define NMAX (1<<20)
using namespace std;
int l,r,n,i;
unsigned int v[NMAX+5];
vector <pair <unsigned int,int> > H[MOD+5];
void upd(unsigned int x)
{
H[x%MOD].push_back(make_pair(x,0));
}
int addd(unsigned int x,int val)
{
int cod=x%MOD,i,s=H[cod].size();
for(i=0; i<s; ++i)
if(H[cod][i].first==x)
{
H[cod][i].second+=val;
return H[cod][i].second;
}
}
void erasee(unsigned int x)
{
int cod=x%MOD,i,s=H[cod].size();
for(i=0; i<s; ++i)
if(H[cod][i].first==x)
{
H[cod][i].second=0;
return ;
}
}
long long slv(int l)
{
int i=1,j,crt=0;
long long sol=0LL;
for(j=1; j<=n; ++j)
{
if(addd(v[j],1)==1)
++crt;
while(crt>l)
{
if(addd(v[i],-1)==0)
--crt;
++i;
}
sol+=1LL*(j-i+1);
}
for(j=i; j<=n; ++j)
erasee(v[j]);
return sol;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d",&n,&l,&r);
for(i=1; i<=n; ++i)
{
scanf("%u",&v[i]);
upd(v[i]);
}
printf("%lld\n",slv(r)-slv(l-1));
return 0;
}