Pagini recente » Cod sursa (job #1486635) | Cod sursa (job #1555411) | Cod sursa (job #2980480) | Cod sursa (job #2645924) | Cod sursa (job #2601877)
#include <bits/stdc++.h>
using namespace std;
const int modu=666013;
vector < pair <int,int> > hashis[2][modu];
int n,l,u,v[(1<<20)+3],p0,p1,var,kontor0,kontor1,ans;
bool insert_hash (int x, int val) {
var=x%modu;
for(int i=0;i<(int)hashis[val][var].size();++i)
if(hashis[val][var][i].first==x) {
++hashis[val][var][i].second;
if(hashis[val][var][i].second==1)
return true;
else
return false;
}
hashis[val][var].push_back({x,1});
return true;
}
bool delete_hash (int x, int val) {
var=x%modu;
for(int i=0;i<(int)hashis[val][var].size();++i)
if(hashis[val][var][i].first==x) {
if(hashis[val][var][i].second>0) {
--hashis[val][var][i].second;
if(hashis[val][var][i].second==0)
return true;
}
else
return false;
}
return false;
}
int main () {
bool ok;
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d", &n, &l, &u);p1=1;p0=1;
for(int i=1;i<=n;++i) {
scanf("%d", &v[i]);
if(insert_hash(v[i],0)==true) {
++kontor0;
while(kontor0>=l) {
if(delete_hash(v[p0],0)==true)
--kontor0;
++p0;
}
if(p0>1 && kontor0<l)
--p0,ok=insert_hash(v[p0],0),++kontor0;
}
if(insert_hash(v[i],1)==true) {
++kontor1;
while(kontor1>u) {
if(delete_hash(v[p1],1)==true)
--kontor1;
++p1;
}
}
if(kontor0==l)
ans=ans+p0-p1+1;
}
printf("%d", ans);
return 0;
}