Pagini recente » Cod sursa (job #2163846) | Cod sursa (job #1663879) | Cod sursa (job #2111644) | Cod sursa (job #1010457) | Cod sursa (job #13223)
Cod sursa(job #13223)
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
#define ui unsigned int
#define ll long long
#define maxn 1048576
#define mod 666013
#define maxl 15
int n,x,y;
ui a[maxn];
int b[maxn];
ll sol;
int v[mod];
char s[maxl];
vector <int> c[mod];
vector <ui> p[mod];
int add(int x)
{
int aux=a[x]%mod,i;
for (i=0;i<p[aux].size();i++)
if (p[aux][i]==a[x])
{
c[aux][i]++;
return 0;
}
p[aux].push_back(a[x]);
c[aux].push_back(1);
b[x]=v[aux];
v[aux]++;
return 1;
}
int extract(int x)
{
int aux=a[x]%mod,i=b[x];
// while (x!=p[aux][i]) i++;
if (c[aux][i]>1)
{
c[aux][i]--;
return 0;
}
else {
v[aux]--;
c[aux][i]=c[aux][v[aux]];
c[aux].pop_back();
p[aux][i]=p[aux][v[aux]];
p[aux].pop_back();
return 1;
}
}
ll count(int x)
{
int i,j=0,diff=0;
ll rez=0;
for (i=0;i<n;i++)
{
diff+=add(i);
while ((diff>=x) && (j<=i))
{
diff-=extract(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);
for (i=0;i<mod;i++)
{
c[i].clear();
p[i].clear();
}
memset(v,0,sizeof(v));
// printf("%lld\n",sol);
sol=sol-count(y+1);
printf("%lld\n",sol);
return 0;
}