Pagini recente » Cod sursa (job #3341864) | Cod sursa (job #139634) | Cod sursa (job #1112552) | Cod sursa (job #1332161) | Cod sursa (job #425419)
Cod sursa(job #425419)
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 1048578
#define MOD 666013
unsigned int v[NMAX],nra[NMAX],n;
vector < pair<unsigned int,unsigned > > H[MOD];
unsigned int findval(unsigned int val)
{
unsigned int L = val % MOD, i;
for (i=0; i<H[L].size(); ++i)
if (H[L][i].first==val) return H[L][i].second;
return 0;
}
unsigned int SecDist(unsigned int X)
{
unsigned int i,Li,nrsec,nrd;
memset(nra,0,sizeof(nra));//nr aparitii
Li=1; nrd=0; nrsec=0;
for (i=1;i<=n; ++i)
{
nra[v[i]]++;
if (nra[v[i]]==1) ++nrd;
while (nrd>X)
{
if (nra[v[Li]]--);
if (!nra[v[Li]]) --nrd;
++Li;
}
nrsec+=i-Li+1;
}
return nrsec;
}
int main()
{
freopen("secv5.in","r",stdin);
unsigned int L,U;
scanf("%lu %lu %lu",&n,&L,&U);
unsigned nd=0,i;
int val;
for (i=1;i<=n;++i)
{
scanf("%lu",&val);
v[i]=findval(val);
if( !v[i])
{
++nd;
H[val%MOD].push_back( make_pair(val,nd));
v[i]=nd;
}
}
freopen("secv5.out","w",stdout);
unsigned int sU=SecDist(U);
unsigned int sL=SecDist(L-1);
printf("%lu\n",sU-sL);
return 0;
}