Pagini recente » Cod sursa (job #912801) | Cod sursa (job #2079903) | Cod sursa (job #2700149) | Cod sursa (job #2325957) | Cod sursa (job #1782210)
# include <bits/stdc++.h>
# define per pair <int, int>
# define MOD 666013
using namespace std;
const int Nmax = 1048576 + 5;
int n, l, u, ind, a[Nmax], ap[Nmax];
vector < per > H[MOD + 5];
void Update(int x)
{
int xx = x % MOD;
x %= MOD;
vector < per >::iterator it;
for (it = H[x].begin(); it != H[x].end(); ++it)
{
per y = *it;
if (y.first == xx) return;
}
H[x].push_back( make_pair(xx, ++ind) );
}
int Find(int x)
{
int xx = x % MOD;
x %= MOD;
vector < per >:: iterator it;
for (it = H[x].begin(); it != H[x].end(); ++it)
{
per y = *it;
if (y.first == xx) return y.second;
}
}
int sol(int length)
{
int j = 1, ans = 0, nr = 0;
memset(ap, 0, sizeof(ap));
for (int i = 1; i <= n; ++i)
{
ap[a[i]]++;
if (ap[a[i]] == 1) ++nr;
while (nr > length)
{
ap[a[j]]--;
if (!ap[a[j]]) --nr;
++j;
}
ans += (i - j + 1);
}
return ans;
}
int main ()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%d %d %d\n", &n, &l, &u);
for (int i = 1; i <= n; ++i)
{
scanf("%d ", &a[i]);
Update(a[i]);
}
for (int i = 1; i <= n; ++i)
a[i] = Find(a[i]);
printf("%d\n", sol(u) - sol (l - 1));
return 0;
}