Pagini recente » Cod sursa (job #889350) | Cod sursa (job #717269) | Cod sursa (job #2813176) | Cod sursa (job #1235412) | Cod sursa (job #2350634)
#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,rasp=1;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[i]>=v[mij])
{
st=mij+1;
rasp=mij;
}
else dr=mij-1;
}
norm_a[i]=rasp;
}
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;
}