Pagini recente » Cod sursa (job #2385816) | Cod sursa (job #1839642) | Cod sursa (job #450899) | Cod sursa (job #1161452) | Cod sursa (job #2700784)
#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,minel,maxel;
cin>>n>>minel>>maxel;
for(int i=0;i<n;++i)
cin>>v[i];
unordered_map <unsigned int,int> folosit(N);
int rez=0,j=0;
int dif=0;
for(int i=0;i<n;++i)
{
if(folosit.size()>=minel-1)
{
if(folosit.find(v[i])==folosit.end())
{
folosit[v[i]]=0;
++dif;
}
++folosit[v[i]];
if(folosit.size()<=maxel)
{
++rez;
}
while(dif>=minel && j<=i)
{
if(folosit[v[j]]==1)
{
--dif;
++rez;
folosit.erase(v[i]);
}
++j;
}
}
else
{
if(folosit.find(v[i])==folosit.end())
{
folosit[v[i]]=0;
++dif;
}
++folosit[v[i]];
}
}
folosit.clear();
for(int i=0;i<n;++i)
{
if(folosit.find(v[i])==folosit.end())
{
folosit[v[i]]=0;
}
++folosit[v[i]];
}
if(folosit.size()>= minel && folosit.size()<=maxel) ++rez;
cout<<rez;
return 0;
}
/**
if(i<n-1 && ( folosit.size()<maxel || (folosit.size()==maxel && folosit.find(v[i+1])!=folosit.end() )))
{
++i;
if(folosit.find(v[i])==folosit.end())
{
folosit[v[i]]=0;
}
++folosit[v[i]];
if(folosit.size()>=minel)
{
++rez;
}
}
else
{
if(j+minel-1<=i)
{
--folosit[v[j]];
if(!folosit[v[j]]) folosit.erase(v[j]);
++j;
}
}
**/
/// 13 , 13 , 7 , 9 , 9