Mai intai trebuie sa te autentifici.

Cod sursa(job #2465788)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 30 septembrie 2019 20:28:59
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>
#define mod 666666
using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");

int n, l, u, v[1050000];
struct element
{
    int x, ap;
};
vector <element> h[mod];

int aparitii(int v, int c)
{
    vector <element> :: iterator i;
    for(i=h[c].begin();i!=h[c].end() && i->x!=v; ++i);
    if(i==h[c].end())
        return 0;
    return i->ap;
}
void adauga(int v, int c)
{
    vector <element> :: iterator i;
    for(i=h[c].begin();i!=h[c].end() && i->x!=v; ++i);
    if(i==h[c].end())
        {
            h[c].push_back({v, 1});
            return;
        }
    i->ap++;
}
void sterge(int v, int c)
{
    vector <element> :: iterator i;
    for(i=h[c].begin();i!=h[c].end() && i->x!=v; ++i);
    i->ap--;
    if(i->ap==0)
        h[c].erase(i);
}
int raspuns(int u)
{
    int i, j, dif, secv, ok;
    i=1; j=1; dif=0; secv=0;
    while(j<=n)
    {
        adauga(v[j], v[j]%mod);
        ok=aparitii(v[j], v[j]%mod);
        if(ok==1)
        {
            dif++;
            while(dif>u)
            {
                if(aparitii(v[i], v[i]%mod)==1)
                    dif--;
                sterge(v[i], v[i]%mod);
                i++;
            }
        }
        secv+=j-i+1;
        j++;
    }
    while(i<=n)
    {
        sterge(v[i], v[i]%mod);
        i++;
    }
    return secv;
}
int main()
{
    fin >> n >> l >> u;
    for(int i=1;i<=n;i++)
        fin >> v[i];
    if(l==1)
    fout << raspuns(u);
    else fout << raspuns(u)-raspuns(l-1);
    return 0;
}