Pagini recente » Cod sursa (job #2593957) | Cod sursa (job #170488) | Cod sursa (job #885085) | Cod sursa (job #2666192) | Cod sursa (job #2469799)
#include <bits/stdc++.h>
#define mod 666666
using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");
unsigned int n, l, u, v[1050000];
struct element
{
unsigned int x, ap;
};
vector <element> h[mod];
int aparitii(unsigned int v, int c)
{
vector <element> :: iterator i;
for(i=h[c].begin();i!=h[c].end() && i->x!=v; ++i);
if(i==h[c].end())
return 0;
return i->ap;
}
void adauga(unsigned int v, int c)
{
vector <element> :: iterator i;
for(i=h[c].begin();i!=h[c].end() && i->x!=v; ++i);
if(i==h[c].end())
{
h[c].push_back({v, 1});
return;
}
i->ap++;
}
void sterge(unsigned int v, int c)
{
vector <element> :: iterator i;
for(i=h[c].begin();i!=h[c].end() && i->x!=v; ++i);
i->ap--;
if(i->ap==0)
h[c].erase(i);
}
long long raspuns(int u)
{
int i, j, dif, ok;
long long secv;
i=1; j=1; dif=0; secv=0;
while(j<=n)
{
adauga(v[j], v[j]%mod);
ok=aparitii(v[j], v[j]%mod);
if(ok==1)
{
dif++;
while(dif>u)
{
if(aparitii(v[i], v[i]%mod)==1)
dif--;
sterge(v[i], v[i]%mod);
i++;
}
}
secv+=j-i+1;
j++;
}
while(i<=n)
{
sterge(v[i], v[i]%mod);
i++;
}
return secv;
}
int main()
{
fin >> n >> l >> u;
for(int i=1;i<=n;i++)
fin >> v[i];
if(l==1)
fout << raspuns(u);
else fout << raspuns(u)-raspuns(l-1);
return 0;
}