Pagini recente » Cod sursa (job #1863793) | Cod sursa (job #2110722) | Cod sursa (job #1070118) | Cod sursa (job #2851558) | Cod sursa (job #1315859)
#include <fstream>
#include <list>
using namespace std;
#define NMax 1048580
#define MOD 666013
ifstream f("secv5.in");
ofstream g("secv5.out");
struct Hash
{
int nr,ap;
}q;
int n,L,U;
int v[NMax];
list<Hash> H[MOD];
list<Hash>::iterator it;
int Hsize;
void Hadd(int x)
{
int r = x%MOD;
for(it = H[r].begin(); it != H[r].end(); ++it)
if((*it).nr == x) {(*it).ap++; break;}
if(it == H[r].end())
{
q.nr = x;
q.ap = 1;
H[r].insert(it,q);
++Hsize;
}
}
void Hremove(int x)
{
int r = x%MOD;
for(it = H[r].begin(); it != H[r].end(); ++it)
if((*it).nr == x) break;
if((*it).ap == 1)
{
H[r].erase(it);
--Hsize;
}
else (*it).ap--;
}
void afis(int a, int b)
{
for(int i=a;i<=b;++i)
{
for(int j=a;j<=i;++j) g<<v[j]<<" ";
g<<"\n";
}
}
void afisH()
{
g<<Hsize<<"\n......\n";
for(int i=0;i<MOD;++i)
{
for(it=H[i].begin();it!=H[i].end();++it)
g<<(*it).nr << " -> " <<(*it).ap<<"\n";
}
g<<"\n";
}
bool ok = false;
long long secv(int x)
{
long long sol = 0;
int j = 1;
for(int i=1;i<=n;++i)
{
Hadd(v[i]);
while(x < Hsize) Hremove(v[j++]);
//afisH();
sol += i-j+1;
//afis(j,i);
}
if(ok == false)
{
ok = true;
Hsize = 0;
for(int i=0;i<MOD;++i) H[i].clear();
}
return sol;
}
int main()
{
f>>n>>L>>U;
for(int i=1;i<=n;++i) f>>v[i];
g<<secv(U)-secv(L-1)<<"\n";
f.close();
g.close();
return 0;
}