Pagini recente » Cod sursa (job #387506) | Diferente pentru utilizator/visuianmihai intre reviziile 95 si 96 | Profil jolgau | Cod sursa (job #2007036) | Cod sursa (job #9440)
Cod sursa(job #9440)
#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;
}