Pagini recente » Cod sursa (job #2998847) | Cod sursa (job #4126) | Cod sursa (job #37057) | Cod sursa (job #618873) | Cod sursa (job #9205)
Cod sursa(job #9205)
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define MAX_N 1<<20
#define FIN "secv5.in"
#define FOUT "secv5.out"
int N, L, R, cnt1[MAX_N], cnt2[MAX_N], nv;
unsigned A[MAX_N], V[MAX_N]; char buf[16];
long long Res;
inline int read_int(void)
{
int n = 0;
char *p;
fgets(buf, sizeof(buf), stdin);
for (p = buf; *p >= '0' && *p <= '9'; p++)
n = n*10 + *p-'0';
return n;
}
int main(void)
{
int i, l1, l2, n1, n2;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d %d\n", &N, &L, &R);
for (i = 0; i < N; i++)
A[i] = V[i] = read_int();
sort(V, V+nv);
nv = unique(V, V+nv)-V;
for (i = 0; i < N; i++)
A[i] = lower_bound(V, V+nv, A[i])-V;
for (i = l1 = l2 = n1 = n2 = 0; i < N; i++)
{
if (++cnt1[A[i]] == 1) n1++;
for (; n1 > R && l1 <= i; l1++)
if (--cnt1[A[l1]] == 0) n1--;
if (++cnt2[A[i]] == 1) n2++;
for (; n2 >= L && l2 <= i; l2++)
if (--cnt2[A[l2]] == 0) n2--;
Res += l2-l1;
}
printf("%lld\n", Res);
return 0;
}