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