Pagini recente » Cod sursa (job #2513744) | Cod sursa (job #2136156) | Cod sursa (job #296785) | Cod sursa (job #2284902) | Cod sursa (job #3040011)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int n,m;
long long nr;
int p;
struct hashh
{
vector<int>a,nr;
}h[366019];
int v[1048580];
int esteDeja(int val)
{
int k=val%p;
int i,z=h[k].a.size();
for(i=0;i<z;i++)
if(h[k].a[i]==val)
return i;
return -1;
}
void hashAdd(int val)
{
int j=esteDeja(val),k=val%p;
if(j==-1)
{
h[k].a.push_back(val);
h[k].nr.push_back(1);
}
else
h[k].nr[j]++;
}
void sterge(int val)
{
int k=val%p;
int i,z=h[k].a.size();
for(i=0;i<z;i++)
if(h[k].a[i]==val)
{
if(h[k].nr[i]>1)
h[k].nr[i]--;
else
{
h[k].a.erase(h[k].a.begin()+i);
h[k].a.erase(h[k].nr.begin()+i);
}
return;
}
}
int main()
{
int t,i,j,x,m,M,st,dr,k,z;
f>>n>>m>>M;
p=366019;
for(i=1;i<=n;i++)
f>>v[i];
for(i=1;i<=n;i++)
{
k=0;
for(j=0;j<p;j++)
{
h[j].a.clear();
h[j].nr.clear();
}
for(j=i;j<=n;j++)
{
z=esteDeja(v[j]);
if(z==-1)//daca nu era in hash
{
if(k<M)
{
hashAdd(v[j]);
k++;
if(k>=m)
nr++;
}
else
j=n+1;
}
else
{
//hashAdd(v[j]);
h[v[j]%p].nr[z]++;
if(k>=m)
nr++;
}
}
}
g<<nr;
return 0;
}