Pagini recente » Cod sursa (job #2653159) | Cod sursa (job #1413270) | Cod sursa (job #2852343) | Cod sursa (job #2655635) | Cod sursa (job #85361)
Cod sursa(job #85361)
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define NMAX (1<<20)+5
int a[NMAX], v[NMAX];
int n, l, u;
void read()
{
int i;
scanf("%d%d%d", &n, &l, &u);
for(i = 1; i <= n; ++i)
scanf("%d", a+i);
}
long long solve(long long x)
{
int i, j;
long long res = 0;
int nr = 0;
int len[NMAX];
int uz[NMAX];
memset(uz, 0, sizeof(uz));
len[0] = 1;
for(i = 1; i <= n; ++i)
{
if(!uz[a[i]])
++nr;
++uz[a[i]];
if(nr > x)
for(j = len[i-1]; j <= i; ++j)
{
--uz[a[j]];
if(!uz[a[j]])
{
--nr, len[i] = j+1;
break;
}
}
else
len[i] = len[i-1];
res += i-len[i]+1;
}
// printf("%d\n", res);
return res;
}
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
read();
sort(a+1, a+n+1);
for(int i = 1; i <= n; ++i)
v[i] = (a[i] != a[i-1]) ? i : (v[i-1]);//, printf("%d ", v[i]);
printf("%lld\n", solve(u) - solve(l-1));
return 0;
}