Cod sursa(job #3040011)

Utilizator OrzaSERBANSerban Orza OrzaSERBAN Data 29 martie 2023 11:05:55
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#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;
}