Pagini recente » Cod sursa (job #636890) | Cod sursa (job #451379) | Cod sursa (job #2481519) | Cod sursa (job #2972145) | Cod sursa (job #2751756)
#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
const int N = (1<<20)+1;
unsigned int v[N];
int main()
{
unordered_map <unsigned int, int> lvec;
unordered_map <unsigned int, int> uvec;
ifstream cin("secv5.in");
ofstream cout("secv5.out");
int n,u,l;
cin>>n>>l>>u;
unsigned int upoint=0;
unsigned int lpoint=0;
long long ans=0;
for(int i=0;i<n;i++)
{
cin>>v[i];
if(lvec.find(v[i])==lvec.end())
lvec[v[i]]=1;
else
lvec[v[i]]++;
if(uvec.find(v[i])==uvec.end())
uvec[v[i]]=1;
else
uvec[v[i]]++;
while(lpoint<=i and lvec.size()>=l)
{
if(lvec[v[lpoint]]==1)
lvec.erase(v[lpoint]);
else
lvec[v[lpoint]]--;
lpoint++;
}
while(upoint<=i and uvec.size()>u)
{
if(uvec[v[upoint]]==1)
uvec.erase(v[upoint]);
else
uvec[v[upoint]]--;
upoint++;
}
if(lpoint>upoint)
ans+=lpoint-upoint;
}
cout<<ans<<'\n';
return 0;
}