Pagini recente » Cod sursa (job #2990435) | Cod sursa (job #2055178) | Cod sursa (job #1557424) | Cod sursa (job #2408087) | Cod sursa (job #1252476)
#include <cstdio>
#include <vector>
#include <algorithm>
#define M 666013
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define ui unsigned int
using namespace std;
const int NMAX = (1 << 20) + 5;
ui v[NMAX];
int n, l, u, d;
vector < pair <ui, int> > h[M];
vector < pair <ui, int> > :: iterator it;
void add (ui x)
{
int ind = x % M;
bool OK = false;
for (it = h[ind].begin (); it != h[ind].end () && !OK; ++it)
if (it -> f == x)
{
++it -> s;
OK = true;
}
if (!OK)
{
h[ind].pb (mp (x, 1));
++d;
}
}
void del (ui x)
{
int ind = x % M;
for (it = h[ind].begin (); it != h[ind].end (); ++it)
if (it -> f == x)
{
--it -> s;
if (it -> s == 0) --d;
}
}
long long scv (int lim)
{
int a = 1, b = 1;
long long rez = 0LL;
d = 0;
for (int i = 0; i < M; ++i)
h[i].clear ();
while (b <= n)
{
add (v[b]);
while (d > lim)
{
del (v[a]);
++a;
}
rez += 1LL * (1LL * b - 1LL * a + 1LL);
++b;
}
return rez;
}
int main ()
{
freopen ("secv5.in", "r", stdin);
freopen ("secv5.out", "w", stdout);
scanf ("%d %d %d", &n, &l, &u);
for (int i = 1; i <= n; ++i)
scanf ("%u", &v[i]);
long long nr = 1LL * (1LL* scv (u) - 1LL * scv (l - 1));
printf ("%lld", nr);
return 0;
}