Pagini recente » Cod sursa (job #853789) | Cod sursa (job #1064158) | Cod sursa (job #2849646) | Cod sursa (job #3270216) | Cod sursa (job #3125597)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int nMAX = (1 << 20) + 1;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
struct Element
{
int val,poz;
};
Element v[nMAX];
int w[nMAX], f[nMAX],n;
bool comp (const Element &a, const Element &b)
{
return a.val < b.val;
}
void normalizare()
{
sort(v+1,v+n+1,comp);
int x=1;
w[v[1].poz]=1;
for (int i=2; i<=n; i++)
{
if (v[i].val!=v[i-1].val)
x++;
w[v[i].poz]=x;
}
}
long long calcul(int dif)
{
long long nrs=0;
int nrd=0,p=1;
for (int i=1; i<=n; i++)
f[i]=0;
for(int i=1; i<=n; i++)
{
if(++f[w[i]]==1)
++nrd;
while(nrd>dif&&p<=i)
{
if (--f[w[p]]==0)
--nrd;
++p;
}
nrs+=i-p+1;
}
return nrs;
}
int main()
{
int l, u;
fin >> n >> l >> u;
for (int i=1; i<=n; i++)
{
fin >> v[i].val;
v[i].poz = i;
}
normalizare();
fout << calcul(u) - calcul(l-1);
return 0;
}