Pagini recente » Cod sursa (job #1738607) | Cod sursa (job #1702471) | Cod sursa (job #1004232) | Cod sursa (job #1793540) | Cod sursa (job #246031)
Cod sursa(job #246031)
#include <stdio.h>
#include <vector>
#define mod 666013
using namespace std;
struct per{unsigned long n,k;};
long long sec;
unsigned long n,l,u,i,j,x,k,val,L,p,q,ok,dist,a[1024*1024],nr[1024*1024];
vector <per>v[mod];
per aux;
int main(){
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%ld %ld %ld",&n,&l,&u);
for (i=1;i<=n;++i){
scanf("%ld\n",&x);
k=x%mod;L=v[k].size();ok=0;
for (j=0;j<L;++j) if (v[k][j].n==x){ok=1;break;}
if (ok)val=v[k][j].k;
else {aux.n=x;aux.k=++q;v[k].push_back(aux);val=q;}
a[i]=val;
}
p=1;
for (i=1;i<=n;++i){
if (nr[a[i]]==0){nr[a[i]]=1;dist++;}else nr[a[i]]++;
while (dist>u){nr[a[p]]--;if (nr[a[p]]==0)dist--;p++;}
sec+=i+1-p;
}
p=1;dist=0;l--;memset(nr,0,sizeof(nr));
for (i=1;i<=n;++i){
if (nr[a[i]]==0){nr[a[i]]=1;dist++;}else nr[a[i]]++;
while (dist>l){nr[a[p]]--;if (nr[a[p]]==0)dist--;p++;}
sec-=i+1-p;
}
printf("%lld\n",sec);
return 0;
}