Cod sursa(job #1775018)
Utilizator | Data | 9 octombrie 2016 18:24:35 | |
---|---|---|---|
Problema | Secventa 5 | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 4.18 kb |
#include <cstdio>
#include <vector>
using namespace std;
vector <unsigned int> v[666016],v1[666016];
int u,i,p,j,k,u1[1050000],n,l,r,nr,x1,poz,z;
unsigned int a[1050000];
long long s;
bool ok,o;
int main()
{
freopen ("secv5.in","r",stdin);
freopen ("secv5.out","w",stdout);
scanf ("%d %d %d", &n, &l, &r);
u=0;
poz=1;
for (i=1;i<=n;i++)
{
scanf ("%ud", &a[i]);
x1=a[i]%666013;
ok=true;
o=true;
z=v[x1].size();
for (j=0;j<z;j++)
{
if (v[x1][j]==a[i])
{
if (v1[x1][j]==0)
{
nr++;
v1[x1][j]++;
}
else
{
ok=false;
v1[x1][j]++;
}
o=false;
break;
}
}
if (ok==true)
{
if (o==true)
{
nr++;
v[x1].push_back(a[i]);
v1[x1].push_back(1);
}
if (nr>l)
{
for (j=poz;j<=i;j++)
{
x1=a[j]%666013;
z=v[x1].size();
for (k=0;k<z;k++)
{
if (v[x1][k]==a[j])
{
v1[x1][k]--;
break;
}
}
if (v1[x1][k]==0)
break;
}
poz=j+1;
nr=l;
u=j+1;
}
if (nr==l)
{
for (j=poz;j<=i;j++)
{
x1=a[j]%666013;
z=v[x1].size();
for (k=0;k<z;k++)
{
if (v[x1][k]==a[j])
break;
}
if (v1[x1][k]>1)
v1[x1][k]--;
else
break;
}
poz=j;
u=j;
}
}
else if (nr==l)
{
for (j=poz;j<=i;j++)
{
x1=a[j]%666013;
z=v[x1].size();
for (k=0;k<z;k++)
{
if (v[x1][k]==a[j])
break;
}
if (v1[x1][k]>1)
v1[x1][k]--;
else
break;
}
poz=j;
u=j;
}
u1[i]=u;
}
for (i=0;i<666013;i++)
{
v[i].clear();
v1[i].clear();
}
p=1;
nr=0;
poz=1;
s=0LL;
for (i=1;i<=n;i++)
{
x1=a[i]%666013;
ok=true;
o=true;
z=v[x1].size();
for (j=0;j<z;j++)
{
if (v[x1][j]==a[i])
{
if (v1[x1][j]==0)
{
nr++;
v1[x1][j]++;
}
else
{
v1[x1][j]++;
ok=false;
}
o=false;
break;
}
}
if (ok==true)
{
if (o==true)
{
nr++;
v[x1].push_back(a[i]);
v1[x1].push_back(1);
}
if (nr>r)
{
for (j=poz;j<=i;j++)
{
x1=a[j]%666013;
z=v[x1].size();
for (k=0;k<z;k++)
{
if (v[x1][k]==a[j])
{
v1[x1][k]--;
break;
}
}
if (v1[x1][k]==0)
break;
}
nr=r;
p=j+1;
poz=j+1;
}
}
s=0LL+s+u1[i]-p+1;
}
printf ("%lld", s);
return 0;
}