Pagini recente » Cod sursa (job #2394850) | Cod sursa (job #304060) | Cod sursa (job #1553930) | Cod sursa (job #1060398) | Cod sursa (job #965253)
Cod sursa(job #965253)
#include<stdio.h>
#include<vector>
#define pb push_back
#define mp make_pair
#define mod 666013
#define maxn 1048581
using namespace std;
typedef long long int ui;
ui n,l,u,st1,st2,lst1,lst2,sol,ind;
ui v[maxn],f1[maxn],f2[maxn];
vector < pair<ui,ui> > h[mod];
int hash_imp(unsigned int k)
{
return k%mod;
}
int search(ui x)
{
int k=hash_imp(x);
for(unsigned int i=0;i<h[k].size();i++)
if(h[k][i].first==x)
return h[k][i].second;
h[k].pb(mp(x,++ind));
return ind;
}
void del_1()
{
lst1--; f1[v[st1]]--; st1++;
}
void del_2()
{
while(f2[v[st2]]>1) { f2[v[st2]]--; st2++; }
lst2--; f2[v[st2]]--; st2++;
}
void formalize()
{
while(f1[v[st1]]>1) { f1[v[st1]]--; st1++; }
}
void cit()
{
ui x;
ui i;
scanf("%u%u%u",&n,&l,&u);
ui aux1,aux2;
st1=st2=1; lst1=lst2=0;
for(i=1;i<=n;i++)
{
scanf("%u",&x);
v[i]=search(x);
if(f1[v[i]]==0)
{
lst1++;
if(f2[v[i]]==0) lst2++;
}
aux1=lst1; aux2=lst2;
f1[v[i]]++; f2[v[i]]++;
if(lst1==l) formalize();
if(lst1>l) { del_1(); formalize(); }
if(lst2>u) del_2();
if(lst1>=l && lst2<=u) sol+=st1-st2+1; //printf("%u %u %u %u %u \n",i,st1,st2,aux1,aux2);}
}
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
cit();
printf("%u",sol);
fclose(stdin);
fclose(stdout);
return 0;
}