Pagini recente » Cod sursa (job #1476814) | Cod sursa (job #1446123) | Cod sursa (job #1772957) | Cod sursa (job #1789833) | Cod sursa (job #246032)
Cod sursa(job #246032)
#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("%lu %lu %lu",&n,&l,&u);
for (i=1;i<=n;++i){
scanf("%lu\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;
}