Pagini recente » Cod sursa (job #2319624) | Cod sursa (job #1467565) | Cod sursa (job #15924) | Cod sursa (job #3288960) | Cod sursa (job #2751836)
/*#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;
}*/
#include <bits/stdc++.h>
using namespace std;
unordered_map <long long, long long > mp;
const int N=(1<<20)+1;
long long v[N],n;
long long f[N];
long long rez(long long d)
{
long long ans=0;
if(d==0)
return ans;
memset(f,0,sizeof(f));
long long cnt=0,st=1;
for(long long dr=1;dr<=n;++dr)
{
if(f[v[dr]]==0)
cnt++;
f[v[dr]]++;
if(cnt<=d)
ans+=(dr-st+1);
else
{
while(cnt>d)
{
f[v[st]]--;
if(f[v[st]]==0)
cnt--;
st++;
}
ans+=(dr-st+1);
}
}
return ans;
}
int main()
{
ifstream cin("secv5.in");
ofstream cout("secv5.out");
long long l,u;
cin>>n>>l>>u;
long long cnt=0;
for(long long i=1;i<=n;i++)
{
cin>>v[i];
if(mp[v[i]]==0)
{
mp[v[i]]=++cnt;
v[i]=cnt;
}
else
v[i]=mp[v[i]];
}
mp.clear();
cout<<rez(u)-rez(l-1);
return 0;
}