Pagini recente » Cod sursa (job #767034) | Cod sursa (job #934778) | Cod sursa (job #1658995) | Cod sursa (job #2813959) | Cod sursa (job #994133)
Cod sursa(job #994133)
#include <iostream>
#include <fstream>
#include <algorithm>
#define Nmax (1<<20) + 2
using namespace std;
int n, l, u;
int a[Nmax];
int fr1[Nmax], fr2[Nmax];
int sol;
int aux[Nmax];
inline void Read()
{
ifstream f ("secv5.in");
f>>n>>l>>u;
int i;
for (i=1; i<=n; i++)
f>>a[i];
f.close();
}
inline 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;
}
inline void Solve()
{
int st, dr1, dr2, c1, c2;
st = dr1 = dr2 = c1 = c2 = 1;
fr1[a[1]] = fr2[a[1]] = 1;
while(dr1 <= n)
{
if(c1 < l)
{
dr1++;
if (dr1<=n)
{
if(fr1[a[dr1]]==0)
c1++;
fr1[a[dr1]]++;
}
}
if(c2 <= u && dr2 < n)
{
dr2++;
if(fr2[a[dr2]]==0)
c2++;
fr2[a[dr2]]++;
}
else
if(c1 == l && c2 <= u+1 && c2 >= l)
{
sol+=dr2-dr1;
if(c2 <= u)
sol++;
if(--fr1[a[st]]==0)
c1--;
if(--fr2[a[st]]==0)
c2--;
st++;
}
}
}
inline void Write()
{
ofstream g("secv5.out");
g<<sol<<"\n";
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}