Pagini recente » Cod sursa (job #1259522) | Cod sursa (job #2166764) | Cod sursa (job #3271471) | Cod sursa (job #2012454) | Cod sursa (job #3316546)
#include<fstream>
#include<cstring>
#include<unordered_map>
using namespace std;
ifstream cin("secv5.in");
ofstream cout("secv5.out");
const int Z=4096;
unsigned a[1048576],c[1048576],n,p=Z;
unordered_map<int,int> b;
char s[Z];
inline char A()
{
if(p==Z)
cin.read(s,Z),p=0;
return s[p++];
}
unsigned B()
{
unsigned n=0;
char c=A();
for(;c>47;n=c-48+n*10,c=A());
return n;
}
long long C(int l)
{
memset(c,0,sizeof c);
int i=0,j=0,k=0;
long long w=0;
for(;j<n&&k<l;++j) {
if(!c[a[j]])
++k;
++c[a[j]],w+=j;
}
for(w+=j;j<n;) {
if(!c[a[j]])
++k;
for(++c[a[j++]];i<n&&k>l;++i)
if(--c[a[i]],!c[a[i]])
--k;
w+=j-i;
}
return w;
}
int main()
{
n=B();
unsigned m=0,u=B(),v=B();
for(int i=0;i<n;a[i++]=B());
for(int i=0;i<n;++i)
if(b.find(a[i])==b.end())
b[a[i]]=m,a[i]=m++;
else
a[i]=b[a[i]];
return cout<<C(v)-(u>1?C(u-1):0),0;
}