Pagini recente » Cod sursa (job #1574458) | Cod sursa (job #1723250) | Cod sursa (job #1648968) | Cod sursa (job #3784) | Cod sursa (job #993090)
Cod sursa(job #993090)
#include <fstream>
#include <algorithm>
#define Nmax 1048586
#define In "secv5.in"
#define Out "secv5.out"
using namespace std;
int fr1[Nmax],fr2[Nmax], a[Nmax],n, p, sol, q, v[Nmax];
inline void Read()
{
ifstream f(In);
f>>n>>p>>q;
int i;
for(i = 1;i <= n; ++i)
{
f >> v[i];
a[i] = v[i];
}
f.close();
}
inline void Normalizare()
{
sort(v+1,v+n+1);
for(int i = 1;i <= n; ++i)
a[i] = upper_bound(v+1,v+n+1,a[i])-v-1;
}
ofstream g(Out);
inline void Solve()
{
int st = 1,dr1 = 1,dr2 = 1,cnt1 = 1,cnt2 = 1;
fr1[a[1]]++;
fr2[a[1]]++;
/* g<<n<<"\n";
for(int i = 1;i <= n; ++i)
g<<a[i]<<" ";*/
while(dr1 <= n)
{
if(cnt1 < p)
{
++dr1;
if(++fr1[a[dr1]]==1)
++cnt1;
}
if(cnt2 <= q && dr2<=n)
{
++dr2;
if(++fr2[a[dr2]]==1)
++cnt2;
}
else
{
sol += dr2-dr1;
if(--fr1[a[st]]==0)
--cnt1;
if(--fr2[a[st]]==0)
--cnt2;
st++;
}
}
// g<<st<<" "<<dr1<<" "<<dr2<<" "<<cnt1<<" "<<cnt2<<"\n";
if(cnt1== p && cnt2==q+1)
sol += dr2-dr1;
}
inline void Write()
{
g<<sol-1<<"\n";
g.close();
}
int main()
{
Read();
//Normalizare();
Solve();
Write();
return 0;
}