Pagini recente » Cod sursa (job #2199481) | Cod sursa (job #1160815) | Cod sursa (job #2943848) | Cod sursa (job #2459247) | Cod sursa (job #9558)
Cod sursa(job #9558)
#include <cstdio>
#include <map>
using namespace std;
const int MAXN = (1 << 20) + 5;
int N, L, U, x[MAXN];
map<int, int> M;
long long getnumber(int K)
{
if (K == 0)
return 0;
int l, r; long long nr = 0;
M.clear();
for (l = r = 0; r < N; r++)
{
if (M.find( x[r] ) == M.end())
M[ x[r] ] = 1;
else
M[ x[r] ] = M[ x[r] ] + 1;
for (; (int)M.size() > K; l++)
{
M[ x[l] ] = M[ x[l] ] - 1;
if (M[ x[l] ] == 0)
M.erase( M.find( x[l] ) );
}
nr += r - l + 1;
}
return nr;
}
int main()
{
freopen("secv5.in", "rt", stdin);
freopen("secv5.out", "wt", stdout);
scanf("%d %d %d", &N, &L, &U);
for (int i = 0; i < N; i++)
scanf("%d", x + i);
printf("%lld\n", getnumber(U) - getnumber(L - 1));
return 0;
}