Pagini recente » Cod sursa (job #777137) | Cod sursa (job #2118150) | Cod sursa (job #1645173) | Cod sursa (job #2392834) | Cod sursa (job #809031)
Cod sursa(job #809031)
#include <iostream>
#include <fstream>
#include <vector>
#define KEY 666013
using namespace std;
vector<pair<int,int> > hash[66015];
int p[(1<<20)+13];
int maxi[(1<<20)+13],mini[(1<<20)+13];
int main()
{
int n,l,L,k=0;
ifstream f("secv5.in");
ofstream g("secv5.out");
f>>n>>l>>L;
for(int i=1;i<=n;i++)
{
int x;
bool gasit=false;
f>>x;
int niv=x%KEY;
for(int j=0;j<hash[niv].size();j++)
if(hash[niv][j].first==x)
{
gasit=true;
p[i]=hash[niv][j].second;
break;
}
if(!gasit)
{
hash[niv].push_back(make_pair(x,++k));
p[i]=k;
}
}
int distmin=0,distmax=0,cmin=1,cmax=1,total=0;
for(int i=1;i<=n;i++)
{
if(maxi[p[i]]==0)
distmax++;
if(mini[p[i]]==0)
distmin++;
++maxi[p[i]];
++mini[p[i]];
while(distmin>=l)
{
--mini[p[cmin]];
if(!mini[p[cmin]])
distmin--;
cmin++;
}
while(distmax>L)
{
--maxi[p[cmax]];
if(!maxi[p[cmax]])
distmax--;
cmax++;
}
total+=cmin-cmax;
// cout<<"i:"<<i<<" cmin :"<<cmin<<" cmax:"<<cmax<<endl;
// cout<<" minime : "<<distmin<<" maxime :"<<distmax<<endl;
}
g<<total;
return 0;
}