Pagini recente » Cod sursa (job #2494890) | Cod sursa (job #1330853) | Cod sursa (job #490403) | Cod sursa (job #570396) | Cod sursa (job #10032)
Cod sursa(job #10032)
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
const int MAXN = (1 << 20) + 5;
int N, L, U;
unsigned x[MAXN];
vector< pair<unsigned, int> > y;
short used[MAXN];
long long getnumber(int K)
{
if (K == 0)
return 0;
int l, r, nrused = 0; long long nr = 0;
memset(used, 0, sizeof(used));
for (l = r = 0; r < N; r++)
{
if (!used[ x[r] ])
nrused++;
used[ x[r] ]++;
for (; nrused > K; l++)
{
used[ x[l] ]--;
if (!used[ x[l] ])
nrused--;
}
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("%u", x + i);
y.push_back( make_pair(x[i], i) );
}
sort(y.begin(), y.end());
for (int i = 0, j = 0; i < N; i++)
{
if (i > 0 && y[i].first != y[i - 1].first)
j++;
x[ y[i].second ] = j;
}
printf("%lld\n", getnumber(U) - getnumber(L - 1));
return 0;
}