Pagini recente » Cod sursa (job #541566) | Cod sursa (job #3003367) | Cod sursa (job #52849) | Cod sursa (job #2031650) | Cod sursa (job #1174325)
#include <cstdio>
#include <algorithm>
using namespace std;
struct qq
{
unsigned int p, x;
}w[1100005];
unsigned int n, st, q, d, dr, i, v[1100005], a[1100005];
long long x, y;
bool compp(qq a, qq b)
{
return a.x<b.x;
}
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%u%u%u", &n, &st, &dr);
st--;
for(i=1;i<=n;i++)
{
scanf("%u", &w[i].x);
w[i].p=i;
}
sort(w+1,w+n+1,compp);
v[w[1].p]=1;
for(i=2;i<=n;i++)
if(w[i].x==w[i-1].x) v[w[i].p]=v[w[i-1].p];
else v[w[i].p]=v[w[i-1].p]+1;
q=1;
d=1;
a[v[1]]=1;
for(i=1;i<=n;i++)
{
while(d<=st&&q<=n)
{
q++;
a[v[q]]++;
if(a[v[q]]==1)
d++;
}
a[v[q]]--;
d--;
q--;
x=x+q-i+1;
a[v[i]]--;
if(a[v[i]]==0) d--;
}
q=1;
d=1;
a[v[1]]=1;
for(i=1;i<=n;i++)
{
while(d<=dr&&q<=n)
{
q++;
a[v[q]]++;
if(a[v[q]]==1)
d++;
}
a[v[q]]--;
d--;
q--;
y=y+q-i+1;
a[v[i]]--;
if(a[v[i]]==0) d--;
}
printf("%lld", y-x);
return 0;
}