Pagini recente » Cod sursa (job #544824) | Cod sursa (job #82585) | Cod sursa (job #3271348) | Cod sursa (job #1386932) | Cod sursa (job #993612)
Cod sursa(job #993612)
#include <iostream>
#include<fstream>
#include<algorithm>
#define Nmax (1<<20) + 2
using namespace std;
ofstream fout("secv5.out");
int a[Nmax],fr1[Nmax],fr2[Nmax],c1,c2,n,l,u,sol;
int aux[Nmax];
void Normalizare()
{
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 Citire()
{
ifstream fin("secv5.in");
fin>>n>>l>>u;
for(int i=1;i<=n;i++)
fin>>a[i];
fin.close();
}
void Rezolvare()
{
int st, dr1,dr2;
fr1[a[1]]=1;
fr2[a[1]]=1;
st=dr1=dr2=c1=c2=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++;
}
}
}
}
int main()
{
Citire();
Normalizare();
Rezolvare();
fout<<sol<<"\n";
fout.close();
return 0;
}