Pagini recente » Cod sursa (job #2394082) | Cod sursa (job #574603) | Cod sursa (job #2110526) | Cod sursa (job #621005) | Cod sursa (job #1209207)
#include <cstdio>
#include <vector>
using namespace std;
#define MOD 10003
#define NMAX (1<<21)
#define UI unsigned int
#define PUII pair < unsigned int , int >
#define LL long long
UI where[NMAX],D[NMAX];
UI X,N,left,right,i,j,position,puse;
vector <PUII> H[MOD];
LL calcul(UI limita)
{
UI last=0,diferite=0,i;
LL sol=0;
for (i=1;i<=N;++i)
{
while(true)
{
++last;
++D[where[last]];
if (D[where[last]]==1)
++diferite;
if (diferite>limita || last>N)
break;
}
--D[where[last]];
if (!D[where[last]])
--diferite;
--last;
sol+=1LL*(last-i+1);
--D[where[i]];
if (!D[where[i]])
--diferite;
}
return sol;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%u%u%u",&N,&left,&right);
//NORMALIZARE
for (i=1;i<=N;i++)
{
scanf("%u",&X);
position=0;
for (j=0;j<H[X%MOD].size();++j)
if (H[X%MOD][j].first==X)
position=H[X%MOD][j].second;
if (!position)
{
++puse;
position=puse;
H[X%MOD].push_back(make_pair(X,puse));
}
where[i]=position;
}
printf("%lld",calcul(right)-calcul(left-1));
return 0;
}