Pagini recente » Cod sursa (job #2058255) | Cod sursa (job #1436263) | Cod sursa (job #1286485) | Cod sursa (job #2415482) | Cod sursa (job #2263004)
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
FILE *in=fopen("secv5.in","r");
FILE *out=fopen("secv5.out","w");
unsigned n,s,d,a[2000005],val[2000005],nr,x,L,secs,secd;
vector<pair<unsigned,unsigned> > Hash[100235];
int main(){
fscanf(in,"%d%d%d",&n,&s,&d);
for(unsigned i=1;i<=n;i++){
fscanf(in,"%d",&x);
unsigned key=x%100231;
for(vector<pair<unsigned,unsigned> >::iterator it=Hash[key].begin();it!=Hash[key].end();++it)
if((*it).first==x){
a[i]=(*it).second;
break;
}
if(!a[i]){
++nr;
Hash[key].push_back(make_pair(x,nr));
a[i]=nr;
}
}
memset(val,0,sizeof(unsigned)*n);
L=1; nr=0;
for(unsigned i=1;i<=n;i++){
if(val[a[i]]==0)
++nr;
++val[a[i]];
while(nr>s-1){
if(val[a[L]]==1)
--nr;
--val[a[L]];
++L;
}
secs+=i-L+1;
}
memset(val,0,sizeof(unsigned)*n);
L=1; nr=0;
for(unsigned i=1;i<=n;i++){
if(val[a[i]]==0)
++nr;
++val[a[i]];
while(nr>d){
if(val[a[L]]==1)
--nr;
--val[a[L]];
++L;
}
secd+=i-L+1;
}
fprintf(out,"%d",secd-secs);
}