Pagini recente » Cod sursa (job #22103) | Cod sursa (job #466263) | Cod sursa (job #2878911) | Cod sursa (job #3139100) | Cod sursa (job #11635)
Cod sursa(job #11635)
#include <cstdio>
#include <map>
using namespace std;
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define BAZA 1048576
#define RS 1048575
#define SL 20
typedef unsigned int uint;
typedef long long lint;
uint n,A[1<<20],u,l;
map <uint,uint> H[BAZA];
uint B[1<<18];
bool C[1<<20];
lint doit(uint l)
{
if(!l)
return 0;
uint i,j=0,nr=0;
lint sol=0;
FOR(i,0,n)
{
for(;nr<=l&&j<n;j++)
{
if(!B[A[j]])
nr++;
B[A[j]]++;
}
sol+=j-i-(nr<=l?0:1);
B[A[i]]--;
if(!B[A[i]])
nr--;
}
return sol;
}
char s[128];
uint cit()
{
uint i,j=0;
fgets(s,100,stdin);
for(i=0;s[i]>='0'&&s[i]<='9';i++)
j=j*((uint)10)+((uint)(s[i]-'0'));
return j;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
int i,j=0;
fgets(s,100,stdin);
sscanf(s,"%u %u %u",&n,&u,&l);
FOR(i,0,n)
A[i]=cit();
FOR(i,0,n)
{
if(C[A[i]>>SL]&&C[A[i]&RS]&&H[A[i]&RS][A[i]>>SL])
A[i]=H[A[i]&RS][A[i]>>SL]-1;
else
C[A[i]>>SL]=C[A[i]&RS]=1,++j,H[A[i]&RS][A[i]>>SL]=j,A[i]=j-1;
}
// fprintf(stderr,"%d\n",j);
printf("%lld\n",doit(l)-doit(u-1));
return 0;
}