Pagini recente » Cod sursa (job #2643085) | Cod sursa (job #2496016) | Cod sursa (job #1879537) | Cod sursa (job #1045259) | Cod sursa (job #11990)
Cod sursa(job #11990)
#include <stdio.h>
#include <string.h>
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define RS 131071
#define SL 16
#define SR 16
typedef unsigned int uint;
typedef long long lint;
uint n,A[1<<20],u,l;
int H[RS+1][SR];
short int B[1<<21];
lint doit(uint l)
{
if(!l)
return 0;
uint i,j=0,nr=0;
lint sol=0;
uint *p=A;
FOR(i,0,n)
{
for(;j<n&&nr<=l;j++,p++)
{
// if(!H[(*p)>>4][(*p)&31])
if(!B[(*p)])
nr++;
B[*p]++;
// ++H[(*p)>>4][(*p)&31];
}
sol+=j-i-(nr<=l?0:1);
// if(!(--H[A[i]>>4][A[i]&31]))
if(!(--B[A[i]]))
nr--;
}
return sol;
}
char s[64];
uint cit()
{
uint i,j=0;
fgets(s,64,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,jj;
uint x,y;
uint xx;
fgets(s,64,stdin);
sscanf(s,"%u %u %u",&n,&u,&l);
FOR(i,0,n)
{
xx=cit();
x=xx>>SL,y=(xx&RS);
x++;
FOR(jj,0,SR)
if(H[y][jj]==x||!H[y][jj])
break;
if(!H[y][jj])
H[y][jj]=x;
A[i]=((y<<4)|(jj));
}
// memset(H,0,sizeof(H));
printf("%lld\n",doit(l)-doit(u-1));
return 0;
}