Pagini recente » Cod sursa (job #2720433) | Cod sursa (job #2214473) | Cod sursa (job #2099099) | Cod sursa (job #1497699) | Cod sursa (job #2350654)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
const int NMAX = (1<<20)+5;
int a[NMAX],norm_a[NMAX];
int v[NMAX],frecv[NMAX];
int main()
{
int n,l,u;
fin >> n >> l >> u;
for(int i=1;i<=n;i++)
{
fin >> a[i];
norm_a[i]=a[i];
}
sort(norm_a+1,norm_a+n+1);
int k=0;
for(int i=1;i<=n;i++)
{
if(norm_a[i]!=norm_a[i-1])
{
v[++k]=norm_a[i];
}
}
for(int i=1;i<=n;i++)
{
int st=1;
int dr=k,mij,rrasp=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[i]>=v[mij])
{
st=mij+1;
rrasp=mij;
}
else dr=mij-1;
}
norm_a[i]=rrasp;
}
int dif=0;
int st=1;
long long rasp=0;
for(int i=1;i<=n;i++)
{
if(frecv[norm_a[i]]==0) dif++;
frecv[norm_a[i]]++;
while(dif>u)
{
frecv[norm_a[st]]--;
if(frecv[norm_a[st]]==0) dif--;
st++;
}
rasp+=(i-st+1);
}
for(int i=1;i<=n;i++) frecv[i]=0;
dif=0;
st=1;
for(int i=1;i<=n;i++)
{
if(frecv[norm_a[i]]==0) dif++;
frecv[norm_a[i]]++;
while(dif>=l)
{
frecv[norm_a[st]]--;
if(frecv[norm_a[st]]==0) dif--;
st++;
}
rasp-=(i-st+1);
}
fout << rasp;
return 0;
}