Pagini recente » Cod sursa (job #710723) | Cod sursa (job #245322) | Cod sursa (job #1730524) | Cod sursa (job #3194355) | Cod sursa (job #50364)
Cod sursa(job #50364)
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
#define mod 42013
#define mod2 666013
#define maxn 1048576
#define maxl 13
#define ui unsigned int
#define ll long long
#define us unsigned short
#define pb push_back
#define pp pop_back
int n,x,y,dif;
char s[maxl];
int v[mod];
ui a[maxn];
vector <us> p[maxn];
vector <int> c[maxn];
ll sol;
void add(ui x)
{
int y=x%mod,z=x%mod2,i;
for (i=0;i<v[y];i++)
if (p[y][i]==z)
{
c[y][i]++;
return;
}
c[y].pb(1);
p[y].pb(z);
v[y]++;
dif++;
}
void del(ui x)
{
int y=x%mod,z=x%mod2,i;
for (i=0;i<v[y];i++)
if (p[y][i]==z)
{
if (c[y][i]==1)
{
c[y][i]=c[y][v[y]-1];
p[y][i]=p[y][v[y]-1];
dif--;
v[y]--;
c[y].pp();
p[y].pp();
}
else c[y][i]--;
break;
}
}
ll count(int x)
{
int i,j=0;
ll rez=0;
dif=0;
for (i=0;i<n;i++)
{
add(a[i]);
while (dif>x) del(a[j++]);
rez+=i-j+1;
}
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(y);
for (i=0;i<mod;++i)
{
c[i].clear();
p[i].clear();
}
memset(v,0,sizeof(v));
sol-=count(x-1);
printf("%lld\n",sol);
return 0;
}