Pagini recente » Cod sursa (job #1998352) | Cod sursa (job #9738) | Cod sursa (job #1038079) | Cod sursa (job #2671239) | Cod sursa (job #1782232)
# include <bits/stdc++.h>
# define per pair <unsigned int, int>
# define MOD 666013
using namespace std;
const int Nmax = 1048576 + 5;
unsigned int n, l, u, ind, a[Nmax], ap[Nmax];
vector < per > H[MOD + 5];
void Update(unsigned int x)
{
unsigned 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(unsigned int x)
{
unsigned 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 ()
{
ifstream f("secv5.in");
ofstream g("secv5.out");
f >> n >> l >> u;
for (int i = 1; i <= n; ++i)
{
f >> a[i];
Update(a[i]);
}
for (int i = 1; i <= n; ++i)
a[i] = Find(a[i]);
g << sol(u) - sol(l - 1) << '\n';
return 0;
}