Pagini recente » Cod sursa (job #3290202) | Cod sursa (job #764229) | Cod sursa (job #63019) | Cod sursa (job #2296144) | Cod sursa (job #1782130)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
const int NMAX = 1048581;
const int prim = 666013;
vector <pair <int,int> > H[prim];
long long int v[NMAX];
unsigned sol[NMAX];
long long int n,l,u;
long long int normaliz=0;
void AddToHash(unsigned x)
{
int k=x%prim;
for(int i=0; i<H[k].size(); i++)
{
if(H[k][i].first==x)
{
return;
}
}
normaliz++;
H[k].push_back(make_pair(x,normaliz));
}
long long int SearchHash(unsigned x)
{
int k=x%prim;
for(int i=0; i<H[k].size(); i++)
{
if(H[k][i].first==x)
{
return H[k][i].second;
}
}
}
long long seq(int Len)
{
if(Len==0)
return 0;
long long ans=0;
long long int d=0,j=1;
memset(sol,0,sizeof sol); /// Reset sol to 0
for(int i=1; i<=n; i++)
{
sol[v[i]]++;
if(sol[v[i]]==1)
{
d++;
}
while(d>Len)
{
sol[v[j]]--;
if(sol[v[j]]==0)
{
d--;
}
j++;
}
ans+=i-j+1;
}
return ans;
}
int main()
{
in>>n>>l>>u;
for(int i=1; i<=n; i++)
{
in>>v[i];
AddToHash(v[i]);
}
for(int i=1; i<=n; i++)
{
v[i]=SearchHash(v[i]);
}
out<<seq(u)-seq(l-1);
}