Pagini recente » Cod sursa (job #1098238) | Cod sursa (job #1025066) | Cod sursa (job #1779631)
#include <bits/stdc++.h>
#define MOD 666013
#define DIM (1<<20)
using namespace std;
unsigned int v[DIM+10],n,l,u,x,in,i,ap[DIM+10],j;
vector<unsigned int>h[MOD+10],hs[MOD+10];
vector<unsigned int>::iterator it;
bool ok;
long long solve(int nr)
{
int i,j=1,dist=0;
long long ans=0;
memset(ap,0,sizeof(ap));
for(i=1; i<=n; ++i)
{
if(ap[v[i]]==0)dist++;
ap[v[i]]++;
while(dist>nr)
{
ap[v[j]]--;
if(ap[v[j]]==0)dist--;
++j;
}
ans+=i-j+1;
}
return ans;
}
int main()
{
/// freopen("secv5.in","r",stdin);
ifstream f ("secv5.in");
/// freopen("secv5.out","w",stdout);
ofstream g ("secv5.out");
///scanf("%d%d%d",&n,&l,&u);
f>>n>>l>>u;
for(i=1; i<=n; ++i)
{
/// scanf("%d",&v[i]);
f>>v[i];
x=v[i];
ok=false;
for(it=h[x%MOD].begin(); it<h[x%MOD].end(); ++it)
if(*it==v[i])
{
ok=true;
break;
}
if(!ok)h[x%MOD].push_back(v[i]),hs[x%MOD].push_back(++in);
}
for(i=1; i<=n; ++i)
{
x=v[i];
for(j=0; j<h[x%MOD].size(); ++j)
if(h[x%MOD][j]==v[i])
{
v[i]=hs[x%MOD][j];
break;
}
}
///printf("%lld\n",solve(u)-solve(l-1));
g<<solve(u)-solve(l-1)<<'\n';
return 0;
}