Pagini recente » Cod sursa (job #3004303) | Cod sursa (job #2511878) | Cod sursa (job #3248948) | Cod sursa (job #2076905) | Cod sursa (job #2546515)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
map <int,int> m;
int v[2000005],n,l,u,nr,i,q,suma,sum[2000005],st,dr,fr[2000005],pozitie;
struct wow
{
int nr,fr;
}numere[2000000];
int main()
{
f>>n>>l>>u;
for (i=1;i<=n;i++)
{
f>>v[i];
m[v[i]]=1;
}
for (auto ind:m)
{
nr++;
m[ind.first]=nr;
}
for (i=1;i<=n;i++)
{
v[i]=m[v[i]];
}
for (i=1;i<=n;i++)
{
if (v[i]!=v[i-1])
{
numere[++q].nr=v[i];
numere[q].fr=1;
}
else
{
numere[q].fr++;
}
}
for (i=1;i<=q;i++)
{
sum[i]=sum[i]+sum[i-1]+numere[i].fr;
}
nr=0;
st=1;
dr=0;
for (i=1;i<=q;i++)
{
if (fr[numere[i].nr]==0)
{
fr[numere[i].nr]+=numere[i].fr;
nr++;
dr++;
}
else
{
fr[numere[i].nr]+=numere[i].fr;
}
pozitie++;
if (nr==l)
{
pozitie=st;
}
while (nr>u)
{
fr[numere[st].nr]-=numere[st].fr;
if (fr[numere[st].nr]==0)
{
nr--;
}
st++;
}
if (l<=nr&&nr<=u)
{
suma=suma+(sum[pozitie]-sum[st-1])*numere[i].fr;
}
}
g<<suma;
return 0;
}