Pagini recente » Cod sursa (job #132675) | Cod sursa (job #1724779) | Cod sursa (job #1596874) | Cod sursa (job #2912763) | Cod sursa (job #50396)
Cod sursa(job #50396)
#include <stdio.h>
#include <string>
using namespace std;
#define ui unsigned int
#define ll long long
#define maxn 1048576
#define mod 5081
#define maxx 95
#define maxl 15
#define mod2 63647
#define us unsigned short
int n,x,y;
ui a[maxn];
ll sol;
int v[mod];
char s[maxl];
char c[maxx][mod];
us p[maxx][mod];
int add(ui x)
{
int aux=x%mod,i,z=x%mod2;
for (i=0;i<v[aux];i++)
if (p[i][aux]==z)
{
c[i][aux]++;
return 0;
}
p[v[aux]][aux]=z;
c[v[aux]][aux]=1;
v[aux]++;
return 1;
}
int extract(ui x)
{
int aux=x%mod,i=0,z=x%mod2;
while (z!=p[i][aux]) i++;
if (c[i][aux]>1)
{
c[i][aux]--;
return 0;
}
else {
v[aux]--;
c[i][aux]=c[v[aux]][aux];
p[i][aux]=p[v[aux]][aux];
return 1;
}
}
ll count(int x)
{
int i,j=0,diff=0;
ll rez=0;
for (i=0;i<n;i++)
{
diff+=add(a[i]);
while ((diff>=x) && (j<=i))
{
diff-=extract(a[j]);
j++;
}
rez+=j;
}
return rez;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
int i,j;
scanf("%d %d %d ",&n,&x,&y);
for (i=0;i<n;i++)
{
fgets(s,maxl,stdin);
for (j=0;s[j]!='\n';j++) a[i]=a[i]*10+s[j]-'0';
}
sol=count(x);
memset(v,0,sizeof(v));
memset(c,0,sizeof(c));
memset(p,0,sizeof(p));
sol=sol-count(y+1);
printf("%lld\n",sol);
return 0;
}