Pagini recente » Cod sursa (job #1936027) | Cod sursa (job #1020692) | Cod sursa (job #1700058) | Cod sursa (job #43513) | Cod sursa (job #1067689)
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int NMAX = 1048576+4;
const int MOD = 666013;
typedef pair<unsigned int,int> PUI;
int N,L,U,norm;
int A[NMAX];
vector<PUI> H[MOD+5];
int V[NMAX];
long long sol;
int rechercher(unsigned int x)
{
unsigned int r=x%MOD;
vector<PUI>::iterator it;
for(it=H[r].begin();it!=H[r].end();it++)
if(it->first == x) return it->second;
norm++;
H[r].push_back(make_pair(x,norm));
return norm;
}
int main()
{
int i,j,Nr;
unsigned int a;
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d",&N,&L,&U);
for(i=1;i<=N;i++)
{
scanf("%u",&a);
A[i]=rechercher(a);
}
Nr=0;
j=1;
for(i=1;i<=N;i++)
{
V[A[i]]++;
if(V[A[i]]==1) Nr++;
for(; j<=i; j++)
{
if(Nr<=U) break;
V[A[j]]--;
if(V[A[j]]==0) Nr--;
}
sol+=(i-j+1);
}
memset(V,0,sizeof(V));
Nr=0;
j=1;
for(i=1;i<=N;i++)
{
V[A[i]]++;
if(V[A[i]]==1) Nr++;
for(; j<=i; j++)
{
if(Nr<=L-1) break;
V[A[j]]--;
if(V[A[j]]==0) Nr--;
}
sol-=(i-j+1);
}
printf("%lld\n",sol);
return 0;
}