Pagini recente » Cod sursa (job #803206) | Cod sursa (job #1283384) | Cod sursa (job #2102502) | Cod sursa (job #854589) | Cod sursa (job #2907069)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
const int NMAX((1 << 20) + 5), MOD(666013);
vector<pair<unsigned int, int> > HashK[MOD];
unsigned int v[NMAX];
int n, l, u, nrD;
void adauga(unsigned int vv, int addd){
int unde = vv % MOD;
for(auto &it: HashK[unde])
if(it.first == vv){
it.second += addd;
if(it.second == 0)
--nrD;
else if(it.second == 1 && addd == 1)
++nrD;
return;
}
++nrD;
HashK[unde].push_back({vv, 1});
}
long long nrSecv(int lim)
{
if(lim == 0)
return 0;
for(int i = 0; i < MOD; ++i)
HashK[i].clear();
int p1 = 1, p2 = 1;
long long rez = 1;
nrD = 0;
adauga(v[p1], 1);
while(p2 < n)
{
++p2;
adauga(v[p2], 1);
if(nrD <= lim)
rez += p2 - p1 + 1;
else
{
while(p1 <= p2 && nrD > lim)
{
adauga(v[p1], -1);
++p1;
}
rez += p2 - p1 + 1;
}
}
return rez;
}
int main()
{
fin >> n >> l >> u;
for(int i = 1; i <= n; ++i)
fin >> v[i];
fout << nrSecv(u) - nrSecv(l - 1) << '\n';
return 0;
}