Pagini recente » Cod sursa (job #2644153) | Cod sursa (job #543245) | Cod sursa (job #1284461) | Cod sursa (job #1195282) | Cod sursa (job #15429)
Cod sursa(job #15429)
#include <stdio.h>
#include <map>
#include <algorithm>
#define NMAX 1048577
using namespace std;
int A[NMAX], B[NMAX];
int N,L,U;
map< int, int> H;
int find(int nr_max)
{
map<int, int> v;
if (!nr_max)
return 0;
memset(B, 0, sizeof(B));
B[1] = 1;
v[A[1]] = 1;
int nr = 1;
for (int i = 2; i<=N; ++i)
{
if (!v[A[i]])
++nr;
++v[A[i]];
int j = B[i-1];
while (nr>nr_max)
{
--v[A[j]];
if (!v[A[j]])
--nr;
++j;
}
B[i] = j;
}
int S = 0;
for (int i = 1; i<=N; ++i)
S += (i-B[i]+1);
return S;
}
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%d %d %d", &N, &L, &U);
// normalizez
int nr = 0;
for (int i = 1; i<=N; ++i)
{
scanf("%d", A+i);
if (!H[A[i]])
H[A[i]] = ++nr;
A[i] = nr;
}
printf("%d\n", find(U) - find(L-1));
}