Pagini recente » Cod sursa (job #644955) | Cod sursa (job #1849356) | Cod sursa (job #2407876) | Cod sursa (job #259345) | Cod sursa (job #1782249)
# include <bits/stdc++.h>
# define per pair <unsigned int, unsigned int>
# define MOD 666013
using namespace std;
const int Nmax = 1048576 + 5;
unsigned int n, l, u, a[Nmax], ap[Nmax], ind = 0;
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) );
}
unsigned 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;
}
}
long long sol(unsigned int length)
{
unsigned int j = 1, nr = 0;
long long ans = 0;
memset(ap, 0, sizeof(ap));
for (unsigned 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 += 1LL*(i - j + 1);
}
return ans;
}
int main ()
{
ifstream f("secv5.in");
ofstream g("secv5.out");
f >> n >> l >> u;
for (unsigned int i = 1; i <= n; ++i)
{
f >> a[i];
Update(a[i]);
}
for (unsigned int i = 1; i <= n; ++i)
a[i] = Find(a[i]);
g << sol(u) - sol(l - 1) << '\n';
return 0;
}