Pagini recente » Cod sursa (job #688665) | Cod sursa (job #319457) | Cod sursa (job #2966562) | Cod sursa (job #2877541) | Cod sursa (job #791481)
Cod sursa(job #791481)
#include<fstream>
#include<algorithm>
#include<cstring>
#include<vector>
#define MOD 123007
using namespace std;
int n,L,U,nmax,p;
unsigned int v[1050000];
struct ElementH{unsigned int val;int nr;};
vector <ElementH> H[2][123007];
inline void Citire()
{
int i,ns,poz;
unsigned int aux;
char s[20];
ifstream fin("secv5.in");
fin>>n>>L>>U;
fin.getline(s,20);
for(i=1;i<=n;i++)
{
fin.getline(s,20);
ns=strlen(s);
poz=0;
aux=0;
while(poz<ns)
aux=aux*10+s[poz++]-'0';
v[i]=aux;
}
fin.close();
}
inline bool Found(unsigned int x)
{
int i,poz=x%MOD;
for(i=H[p][poz].size()-1;i>=0;i--)
{
if(H[p][poz][i].val==x)
{
if(H[p][poz][i].nr>0)
return true;
return false;
}
}
return false;
}
inline void Add(unsigned int x)
{
int i,poz=x%MOD;
for(i=H[p][poz].size()-1;i>=0;i--)
{
if(H[p][poz][i].val==x)
{
H[p][poz][i].nr++;
return;
}
}
ElementH aux;
aux.val=x;
aux.nr=1;
H[p][poz].push_back(aux);
}
inline void Delete(unsigned int x)
{
int i,poz=x%MOD;
for(i=H[p][poz].size()-1;i>=0;i--)
{
if(H[p][poz][i].val==x)
{
H[p][poz][i].nr--;
return;
}
}
}
inline long long Nr(int size)
{
long long sol=0;
int st=1,dr=1,now=0;
while(dr<=n)
{
if(!Found(v[dr]))
now++;
Add(v[dr]);
while(now>size)
{
Delete(v[st]);
if(!Found(v[st]))
now--;
st++;
}
sol+=(long long)(dr-st+1);
dr++;
}
return sol;
}
inline void Afisare()
{
long long sol;
p=0;
sol=Nr(U);
p=1;
sol-=Nr(L-1);
ofstream fout("secv5.out");
fout<<sol<<"\n";
fout.close();
}
int main()
{
Citire();
Afisare();
return 0;
}