Pagini recente » Cod sursa (job #3161320) | Cod sursa (job #1346108) | Cod sursa (job #1291401) | Cod sursa (job #1020649) | Cod sursa (job #2601880)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");
const int modu=666013;
vector < pair <long long,long long> > hashis[3][modu+3];
long long l,u,v[(1<<20)+3],p0,p1,var,kontor0,kontor1;long long ans;int n;
bool insert_hash (long long 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 (long long 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;
fin>>n>>l>>u;p0=1;p1=1;
for(int i=1;i<=n;++i) {
fin>>v[i];
if(insert_hash(v[i],0)==true) {
++kontor0;
while(kontor0>=l) {
if(delete_hash(v[p0],0)==true)
--kontor0;
++p0;
}
if(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;
}
fout<<ans;
return 0;
}