Pagini recente » Cod sursa (job #2244533) | Cod sursa (job #3157181) | Cod sursa (job #2685997) | Cod sursa (job #330857) | Cod sursa (job #2701618)
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream cin("secv5.in");
ofstream cout("secv5.out");
constexpr int N = (1<<20) + 1;
unsigned int v[N];
int main()
{
int n,l,u;
cin>>n>>l>>u;
//for(int i=0;i<n;++i)
// cin>>v[i];
unordered_map <unsigned int,int> lvec(N);
unordered_map <unsigned int,int> uvec(N);
unsigned int lpoint=0,upoint=0;
unsigned long long rez=0;
for(int i=0;i<n;++i)
{
cin>>v[i];
if(lvec.find(v[i])==lvec.end())
{
lvec[v[i]]=1;
}
else
{
++lvec[v[i]];
}
if(uvec.find(v[i])==uvec.end())
{
uvec[v[i]]=1;
}
else
{
++uvec[v[i]];
}
while(lpoint <= i && lvec.size()>=l)
{
if(lvec[v[lpoint]]==1) lvec.erase(v[lpoint]);
else --lvec[v[lpoint]];
++lpoint;
}
while(upoint < i && uvec.size()>u)
{
if(lvec[v[upoint]]==1) uvec.erase(v[upoint]);
else --uvec[v[upoint]];
++upoint;
}
if(lpoint>upoint) rez+=lpoint-upoint;
}
cout<<rez;
return 0;
}