Pagini recente » Cod sursa (job #3290284) | Cod sursa (job #3137047) | Cod sursa (job #3267883) | Cod sursa (job #3207731) | Cod sursa (job #11362)
Cod sursa(job #11362)
#include <stdio.h>
//#include <map>
//using namespace std;
#define FOR(i,s,d) for(i=(s);i<(d);++i)
typedef unsigned int uint;
typedef long long lint;
uint n,A[1<<20],u,l;
//map <lint,lint> H;
uint B[31][37][41][47];
uint C[101][103][127];
uint Q(uint x)
{
return B[x%31][x%37][x%41][x%47]&&C[x%101][x%103][x%127];
}
uint P(uint x,uint z)
{
B[x%31][x%37][x%41][x%47]+=z;
C[x%101][x%103][x%127]+=z;;
}
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(!Q(A[j]))
nr++;
// else
// if(!H[A[j]])
// nr++;
P(A[j],1);
// H[A[j]]++;
}
sol+=j-i-(nr<=l?0:1);
P(A[i],-1);
// H[A[i]]--;
if(!Q(A[i]))
nr--;
// else
// if(!H[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;
fgets(s,100,stdin);
sscanf(s,"%u %u %u",&n,&u,&l);
FOR(i,0,n)
// scanf("%u",&A[i]);
A[i]=cit();
printf("%lld\n",doit(l)-doit(u-1));
return 0;
}