Pagini recente » Profil AlinaSarbu1 | Cod sursa (job #1503445) | Statistici Ciobanca Emanuel (Ciobanca_Emanuel) | Rating Pavel Adrian Simone (Cimone) | Cod sursa (job #993608)
Cod sursa(job #993608)
#include <fstream>
#include <algorithm>
using namespace std;
int n,l,u;
int a[1050000];
int fr1[1050000],fr2[1050000];
int aux[1050000];
long long sol;
void Citire()
{
ifstream f ("secv5.in");
int i;
f>>n>>l>>u;
for(i=1;i<=n;i++)
f>>a[i];
f.close();
}
inline void Normalizarea()
{
int i;
for (i=1; i<=n; i++)
aux[i] = a[i];
sort(aux+1, aux+n+1);
for (i=1; i<=n; i++)
a[i] = lower_bound(aux+1, aux+n+1, a[i]) - aux;
}
void Problema()
{
int c1,c2,st,dr1,dr2;
fr1[a[1]]=fr2[a[1]]=1;
c1=c2=1;
dr1=1;
dr2=1;
st=1;
while(dr1<=n)
{
if(c1<l)
{
++dr1;
if(++fr1[a[dr1]]==1)
++c1;
}
if(c2<=u && dr2<n)
{
++dr2;
if(++fr2[a[dr2]]==1)
++c2;
}
else
if (c1>=l && c2<=u+1)
{
sol+=dr2-dr1;
if(c2<=u)
sol++;
if(--fr1[a[st]]==0)
--c1;
if(--fr2[a[st]]==0)
--c2;
++st;
}
}
ofstream g("secv5.out");
g<<sol<<"\n";
g.close();
}
int main()
{
Citire();
Normalizarea();
Problema();
return 0;
}