Pagini recente » Cod sursa (job #1089195) | Cod sursa (job #1342242) | Cod sursa (job #2183309) | Cod sursa (job #1904373) | Cod sursa (job #922904)
Cod sursa(job #922904)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <cstring>
#define DN 1048600
#define KEY 33013
#define un unsigned
#define val first
#define normal second
using namespace std;
vector< pair<un int,int> > hash[KEY];
un int v[DN],ind;
int n,l,u,apu[DN],apl[DN];
unsigned long long nrl=0,nru=0;
int insert(un int x)
{
int nivel=x%KEY;
for(un int i=0;i<hash[nivel].size();++i)
if(hash[nivel][i].val==x)
return hash[nivel][i].normal;
hash[nivel].push_back(make_pair(x,++ind));
return ind;
}
int main()
{
int distl=0,distu=0,stl=1,stu=1;
ifstream f("secv5.in");
ofstream g("secv5.out");
f>>n>>l>>u;
--l;
for(int i=1;i<=n;++i)
{
unsigned int x;
f>>x;
v[i]=insert(x);
}
for(int i=1;i<=n;++i)
{
if(distu<u || apu[v[i]])
{
++apu[ v[i] ];
if(apu[ v[i] ]==1)
++distu;
nru+=(i-stu+1);
}
/*else
{
while(distu==u)
{
--apu[ v[stu] ];
if(!apu[ v[stu] ])
--distu;
++stu;
}
++apu[ v[i] ];
if(apu[v[i]]==1)
++distu;
nru+=(i-stu+1);
}
if(distl<l || apl[v[i]])
{
++apl[ v[i] ];
if(apl[ v[i] ]==1)
++distl;
nrl+=(i-stl+1);
}
else
{
while(distl==l)
{
--apl[ v[stl] ];
if(!apl[ v[stl] ])
--distl;
++stl;
}
++apl[ v[i] ];
++distl;
nrl+=(i-stl+1);
}*/
}
g<<nru-nrl;
return 0;
}