Pagini recente » Cod sursa (job #1885380) | Cod sursa (job #3306244) | Cod sursa (job #1860940) | Cod sursa (job #773824) | Cod sursa (job #3351678)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int freq[1048578];
long long functie(const vector<int>& a, int K, int N)
{
if (K<0)
return 0;
for (int i=0;i<=N;i++)
freq[i]=0;
int distinct=0,l=0;
long long res=0;
for (int r=0;r<N;r++)
{
if (freq[a[r]]==0)
distinct++;
freq[a[r]]++;
while(distinct>K)
{
freq[a[l]]--;
if (freq[a[l]] == 0)
{
distinct--;
}
l++;
}
res+=(r-l+1);
}
return res;
}
int main() {
int N,L,U;
fin>>N>>L>>U;
vector<unsigned int> v(N);
vector<unsigned int> vf(N);
for (int i=0;i<N;i++)
{
fin>>v[i];
vf[i]=v[i];
}
sort(vf.begin(), vf.end());
int j=0;
for (int i=1;i<vf.size();i++)
if (vf[i]!=vf[j])
{
j++;
vf[j]=vf[i];
}
vf.resize(j+1);
vector<int> a(N);
for (int i=0;i<N;i++)
{
int low=0,high=(int)vf.size()-1;
int r= -1;
while (low<=high)
{
int mid=low+(high-low)/2;
if (vf[mid]>=v[i])
{
r=mid;
high=mid-1;
}
else
{
low=mid+1;
}
}
a[i]=r;
}
long long ans=functie(a,U,N)-functie(a,L-1,N);
fout<<ans<<"\n";
fin.close();
fout.close();
return 0;
}