Pagini recente » Monitorul de evaluare | Cod sursa (job #423958) | Diferente pentru admin/task-ratings-guidelines intre reviziile 37 si 38 | Cod sursa (job #72199) | Cod sursa (job #3316554)
#include<fstream>
#include<cstring>
#include<unordered_map>
using namespace std;
ifstream cin("secv5.in");
ofstream cout("secv5.out");
unsigned a[1048576],c[1048576],n,u,v;
unordered_map<unsigned,unsigned> b;
long long A(unsigned u)
{
memset(c,0,sizeof c);
unsigned i=0,j=0,k=0,l=0;
long long w=0;
for(;j<n&&k<u;++j) {
if(!c[a[j]])
++k;
++c[a[j]],l+j<l?w+=l,l=j:l+=j;
}
for(l+j<l?w+=l,l=j:l+=j;j<n;) {
if(!c[a[j]])
++k;
for(++c[a[j++]];i<n&&k>u;++i)
if(!--c[a[i]])
--k;
l+j-i<l?w+=l,l=j-i:l+=j-i;
}
return w+l;
}
int main()
{
cin>>n>>u>>v;
for(unsigned i=0;i<n;cin>>a[i++]);
for(unsigned i=0,m=0;i<n;b.find(a[i])==b.end()?b[a[i]]=m,a[i]=m++:a[i]=b[a[i]],++i);
return cout<<A(v)-(u>1?A(u-1):0),0;
}